//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS IoTSiteWise service.
///
/// Welcome to the IoT SiteWise API Reference. IoT SiteWise is an Amazon Web Services service that connects Industrial Internet of Things (IIoT) devices to the power of the Amazon Web Services Cloud. For more information, see the IoT SiteWise User Guide. For information about IoT SiteWise quotas, see Quotas in the IoT SiteWise User Guide.
public struct IoTSiteWise: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the IoTSiteWise client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "IoTSiteWise",
            serviceIdentifier: "iotsitewise",
            serviceProtocol: .restjson,
            apiVersion: "2019-12-02",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: IoTSiteWiseErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "iotsitewise-fips.ca-central-1.amazonaws.com",
            "us-east-1": "iotsitewise-fips.us-east-1.amazonaws.com",
            "us-east-2": "iotsitewise-fips.us-east-2.amazonaws.com",
            "us-gov-west-1": "iotsitewise-fips.us-gov-west-1.amazonaws.com",
            "us-west-2": "iotsitewise-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Associates a child asset with the given parent asset through a hierarchy defined in the parent asset's model. For more information, see Associating assets in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func associateAssets(_ input: AssociateAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AssociateAssets", 
            path: "/assets/{assetId}/associate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Associates a child asset with the given parent asset through a hierarchy defined in the parent asset's model. For more information, see Associating assets in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetId: The ID of the parent asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - childAssetId: The ID of the child asset to be associated. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - hierarchyId: The ID of a hierarchy in the parent asset's model. (This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.) Hierarchies allow different groupings of assets to be formed that all come from the same asset model. For more information, see Asset hierarchies in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateAssets(
        assetId: String,
        childAssetId: String,
        clientToken: String? = AssociateAssetsRequest.idempotencyToken(),
        hierarchyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AssociateAssetsRequest(
            assetId: assetId, 
            childAssetId: childAssetId, 
            clientToken: clientToken, 
            hierarchyId: hierarchyId
        )
        return try await self.associateAssets(input, logger: logger)
    }

    /// Associates a time series (data stream) with an asset property.
    @Sendable
    @inlinable
    public func associateTimeSeriesToAssetProperty(_ input: AssociateTimeSeriesToAssetPropertyRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AssociateTimeSeriesToAssetProperty", 
            path: "/timeseries/associate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Associates a time series (data stream) with an asset property.
    ///
    /// Parameters:
    ///   - alias: The alias that identifies the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - propertyId: The ID of the asset property. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateTimeSeriesToAssetProperty(
        alias: String,
        assetId: String,
        clientToken: String? = AssociateTimeSeriesToAssetPropertyRequest.idempotencyToken(),
        propertyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AssociateTimeSeriesToAssetPropertyRequest(
            alias: alias, 
            assetId: assetId, 
            clientToken: clientToken, 
            propertyId: propertyId
        )
        return try await self.associateTimeSeriesToAssetProperty(input, logger: logger)
    }

    /// Associates a group (batch) of assets with an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func batchAssociateProjectAssets(_ input: BatchAssociateProjectAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchAssociateProjectAssetsResponse {
        try await self.client.execute(
            operation: "BatchAssociateProjectAssets", 
            path: "/projects/{projectId}/assets/associate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Associates a group (batch) of assets with an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - assetIds: The IDs of the assets to be associated to the project.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - projectId: The ID of the project to which to associate the assets.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchAssociateProjectAssets(
        assetIds: [String],
        clientToken: String? = BatchAssociateProjectAssetsRequest.idempotencyToken(),
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchAssociateProjectAssetsResponse {
        let input = BatchAssociateProjectAssetsRequest(
            assetIds: assetIds, 
            clientToken: clientToken, 
            projectId: projectId
        )
        return try await self.batchAssociateProjectAssets(input, logger: logger)
    }

    /// Disassociates a group (batch) of assets from an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func batchDisassociateProjectAssets(_ input: BatchDisassociateProjectAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDisassociateProjectAssetsResponse {
        try await self.client.execute(
            operation: "BatchDisassociateProjectAssets", 
            path: "/projects/{projectId}/assets/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Disassociates a group (batch) of assets from an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - assetIds: The IDs of the assets to be disassociated from the project.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - projectId: The ID of the project from which to disassociate the assets.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDisassociateProjectAssets(
        assetIds: [String],
        clientToken: String? = BatchDisassociateProjectAssetsRequest.idempotencyToken(),
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDisassociateProjectAssetsResponse {
        let input = BatchDisassociateProjectAssetsRequest(
            assetIds: assetIds, 
            clientToken: clientToken, 
            projectId: projectId
        )
        return try await self.batchDisassociateProjectAssets(input, logger: logger)
    }

    /// Gets aggregated values (for example, average, minimum, and maximum) for one or more asset properties. For more information, see Querying aggregates in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func batchGetAssetPropertyAggregates(_ input: BatchGetAssetPropertyAggregatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetAssetPropertyAggregatesResponse {
        try await self.client.execute(
            operation: "BatchGetAssetPropertyAggregates", 
            path: "/properties/batch/aggregates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets aggregated values (for example, average, minimum, and maximum) for one or more asset properties. For more information, see Querying aggregates in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - entries: The list of asset property aggregate entries for the batch get request. You can specify up to 16 entries per request.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 1 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 4000.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetAssetPropertyAggregates(
        entries: [BatchGetAssetPropertyAggregatesEntry],
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetAssetPropertyAggregatesResponse {
        let input = BatchGetAssetPropertyAggregatesRequest(
            entries: entries, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.batchGetAssetPropertyAggregates(input, logger: logger)
    }

    /// Gets the current value for one or more asset properties. For more information, see Querying current values in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func batchGetAssetPropertyValue(_ input: BatchGetAssetPropertyValueRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetAssetPropertyValueResponse {
        try await self.client.execute(
            operation: "BatchGetAssetPropertyValue", 
            path: "/properties/batch/latest", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets the current value for one or more asset properties. For more information, see Querying current values in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - entries: The list of asset property value entries for the batch get request. You can specify up to 128 entries per request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetAssetPropertyValue(
        entries: [BatchGetAssetPropertyValueEntry],
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetAssetPropertyValueResponse {
        let input = BatchGetAssetPropertyValueRequest(
            entries: entries, 
            nextToken: nextToken
        )
        return try await self.batchGetAssetPropertyValue(input, logger: logger)
    }

    /// Gets the historical values for one or more asset properties. For more information, see Querying historical values in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func batchGetAssetPropertyValueHistory(_ input: BatchGetAssetPropertyValueHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetAssetPropertyValueHistoryResponse {
        try await self.client.execute(
            operation: "BatchGetAssetPropertyValueHistory", 
            path: "/properties/batch/history", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets the historical values for one or more asset properties. For more information, see Querying historical values in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - entries: The list of asset property historical value entries for the batch get request. You can specify up to 16 entries per request.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 4 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 20000.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetAssetPropertyValueHistory(
        entries: [BatchGetAssetPropertyValueHistoryEntry],
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetAssetPropertyValueHistoryResponse {
        let input = BatchGetAssetPropertyValueHistoryRequest(
            entries: entries, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.batchGetAssetPropertyValueHistory(input, logger: logger)
    }

    /// Sends a list of asset property values to IoT SiteWise. Each value is a timestamp-quality-value (TQV) data point. For more information, see Ingesting data using the API in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.    With respect to Unix epoch time, IoT SiteWise accepts only TQVs that have a timestamp of no more than 7 days in the past and no more than 10 minutes in the future. IoT SiteWise rejects timestamps outside of the inclusive range of [-7 days, +10 minutes] and returns a TimestampOutOfRangeException error. For each asset property, IoT SiteWise overwrites TQVs with duplicate timestamps unless the newer TQV has a different quality. For example, if you store a TQV {T1, GOOD, V1}, then storing {T1, GOOD, V2} replaces the existing TQV.  IoT SiteWise authorizes access to each BatchPutAssetPropertyValue entry individually. For more information, see BatchPutAssetPropertyValue authorization in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func batchPutAssetPropertyValue(_ input: BatchPutAssetPropertyValueRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchPutAssetPropertyValueResponse {
        try await self.client.execute(
            operation: "BatchPutAssetPropertyValue", 
            path: "/properties", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Sends a list of asset property values to IoT SiteWise. Each value is a timestamp-quality-value (TQV) data point. For more information, see Ingesting data using the API in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.    With respect to Unix epoch time, IoT SiteWise accepts only TQVs that have a timestamp of no more than 7 days in the past and no more than 10 minutes in the future. IoT SiteWise rejects timestamps outside of the inclusive range of [-7 days, +10 minutes] and returns a TimestampOutOfRangeException error. For each asset property, IoT SiteWise overwrites TQVs with duplicate timestamps unless the newer TQV has a different quality. For example, if you store a TQV {T1, GOOD, V1}, then storing {T1, GOOD, V2} replaces the existing TQV.  IoT SiteWise authorizes access to each BatchPutAssetPropertyValue entry individually. For more information, see BatchPutAssetPropertyValue authorization in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - enablePartialEntryProcessing: This setting enables partial ingestion at entry-level. If set to true, we ingest all TQVs not resulting in an error. If set to false, an invalid TQV fails ingestion of the entire entry that contains it.
    ///   - entries: The list of asset property value entries for the batch put request. You can specify up to 10 entries per request.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchPutAssetPropertyValue(
        enablePartialEntryProcessing: Bool? = nil,
        entries: [PutAssetPropertyValueEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchPutAssetPropertyValueResponse {
        let input = BatchPutAssetPropertyValueRequest(
            enablePartialEntryProcessing: enablePartialEntryProcessing, 
            entries: entries
        )
        return try await self.batchPutAssetPropertyValue(input, logger: logger)
    }

    /// Creates an access policy that grants the specified identity (IAM Identity Center user, IAM Identity Center group, or IAM user) access to the specified IoT SiteWise Monitor portal or project resource.  Support for access policies that use an SSO Group as the identity is not supported at this time.
    @Sendable
    @inlinable
    public func createAccessPolicy(_ input: CreateAccessPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAccessPolicyResponse {
        try await self.client.execute(
            operation: "CreateAccessPolicy", 
            path: "/access-policies", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Creates an access policy that grants the specified identity (IAM Identity Center user, IAM Identity Center group, or IAM user) access to the specified IoT SiteWise Monitor portal or project resource.  Support for access policies that use an SSO Group as the identity is not supported at this time.
    ///
    /// Parameters:
    ///   - accessPolicyIdentity: The identity for this access policy. Choose an IAM Identity Center user, an IAM Identity Center group, or an IAM user.
    ///   - accessPolicyPermission: The permission level for this access policy. Note that a project ADMINISTRATOR is also known as a project owner.
    ///   - accessPolicyResource: The IoT SiteWise Monitor resource for this access policy. Choose either a portal or a project.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - tags: A list of key-value pairs that contain metadata for the access policy. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAccessPolicy(
        accessPolicyIdentity: Identity,
        accessPolicyPermission: Permission,
        accessPolicyResource: Resource,
        clientToken: String? = CreateAccessPolicyRequest.idempotencyToken(),
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAccessPolicyResponse {
        let input = CreateAccessPolicyRequest(
            accessPolicyIdentity: accessPolicyIdentity, 
            accessPolicyPermission: accessPolicyPermission, 
            accessPolicyResource: accessPolicyResource, 
            clientToken: clientToken, 
            tags: tags
        )
        return try await self.createAccessPolicy(input, logger: logger)
    }

    /// Creates an asset from an existing asset model. For more information, see Creating assets in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func createAsset(_ input: CreateAssetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssetResponse {
        try await self.client.execute(
            operation: "CreateAsset", 
            path: "/assets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates an asset from an existing asset model. For more information, see Creating assets in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetDescription: A description for the asset.
    ///   - assetExternalId: An external ID to assign to the asset. The external ID must be unique within your Amazon Web Services account. For more information, see Using external IDs in the IoT SiteWise User Guide.
    ///   - assetId: The ID to assign to the asset, if desired. IoT SiteWise automatically generates a unique ID for you, so this parameter is never required. However, if you prefer to supply your own ID instead, you can specify it here in UUID format. If you specify your own ID, it must be globally unique.
    ///   - assetModelId: The ID of the asset model from which to create the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetName: A friendly name for the asset.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - tags: A list of key-value pairs that contain metadata for the asset. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAsset(
        assetDescription: String? = nil,
        assetExternalId: String? = nil,
        assetId: String? = nil,
        assetModelId: String,
        assetName: String,
        clientToken: String? = CreateAssetRequest.idempotencyToken(),
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssetResponse {
        let input = CreateAssetRequest(
            assetDescription: assetDescription, 
            assetExternalId: assetExternalId, 
            assetId: assetId, 
            assetModelId: assetModelId, 
            assetName: assetName, 
            clientToken: clientToken, 
            tags: tags
        )
        return try await self.createAsset(input, logger: logger)
    }

    /// Creates an asset model from specified property and hierarchy definitions. You create assets from asset models. With asset models, you can easily create assets of the same type that have standardized definitions. Each asset created from a model inherits the asset model's property and hierarchy definitions. For more information, see Defining asset models in the IoT SiteWise User Guide. You can create three types of asset models, ASSET_MODEL, COMPONENT_MODEL, or an INTERFACE.    ASSET_MODEL – (default) An asset model that you can use to create assets. Can't be included as a component in another asset model.    COMPONENT_MODEL – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model.     INTERFACE – An interface is a type of model that defines a standard structure that can be applied to different asset models.
    @Sendable
    @inlinable
    public func createAssetModel(_ input: CreateAssetModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssetModelResponse {
        try await self.client.execute(
            operation: "CreateAssetModel", 
            path: "/asset-models", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates an asset model from specified property and hierarchy definitions. You create assets from asset models. With asset models, you can easily create assets of the same type that have standardized definitions. Each asset created from a model inherits the asset model's property and hierarchy definitions. For more information, see Defining asset models in the IoT SiteWise User Guide. You can create three types of asset models, ASSET_MODEL, COMPONENT_MODEL, or an INTERFACE.    ASSET_MODEL – (default) An asset model that you can use to create assets. Can't be included as a component in another asset model.    COMPONENT_MODEL – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model.     INTERFACE – An interface is a type of model that defines a standard structure that can be applied to different asset models.
    ///
    /// Parameters:
    ///   - assetModelCompositeModels: The composite models that are part of this asset model. It groups properties (such as attributes, measurements, transforms, and metrics) and child composite models that model parts of your industrial equipment. Each composite model has a type that defines the properties that the composite model supports. Use composite models to define alarms on this asset model.  When creating custom composite models, you need to use CreateAssetModelCompositeModel. For more information, see Creating custom composite models (Components) in the IoT SiteWise User Guide.
    ///   - assetModelDescription: A description for the asset model.
    ///   - assetModelExternalId: An external ID to assign to the asset model. The external ID must be unique within your Amazon Web Services account. For more information, see Using external IDs in the IoT SiteWise User Guide.
    ///   - assetModelHierarchies: The hierarchy definitions of the asset model. Each hierarchy specifies an asset model whose assets can be children of any other assets created from this asset model. For more information, see Asset hierarchies in the IoT SiteWise User Guide. You can specify up to 10 hierarchies per asset model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - assetModelId: The ID to assign to the asset model, if desired. IoT SiteWise automatically generates a unique ID for you, so this parameter is never required. However, if you prefer to supply your own ID instead, you can specify it here in UUID format. If you specify your own ID, it must be globally unique.
    ///   - assetModelName: A unique name for the asset model.
    ///   - assetModelProperties: The property definitions of the asset model. For more information, see Asset properties in the IoT SiteWise User Guide. You can specify up to 200 properties per asset model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - assetModelType: The type of asset model.    ASSET_MODEL – (default) An asset model that you can use to create assets. Can't be included as a component in another asset model.    COMPONENT_MODEL – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - tags: A list of key-value pairs that contain metadata for the asset model. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssetModel(
        assetModelCompositeModels: [AssetModelCompositeModelDefinition]? = nil,
        assetModelDescription: String? = nil,
        assetModelExternalId: String? = nil,
        assetModelHierarchies: [AssetModelHierarchyDefinition]? = nil,
        assetModelId: String? = nil,
        assetModelName: String,
        assetModelProperties: [AssetModelPropertyDefinition]? = nil,
        assetModelType: AssetModelType? = nil,
        clientToken: String? = CreateAssetModelRequest.idempotencyToken(),
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssetModelResponse {
        let input = CreateAssetModelRequest(
            assetModelCompositeModels: assetModelCompositeModels, 
            assetModelDescription: assetModelDescription, 
            assetModelExternalId: assetModelExternalId, 
            assetModelHierarchies: assetModelHierarchies, 
            assetModelId: assetModelId, 
            assetModelName: assetModelName, 
            assetModelProperties: assetModelProperties, 
            assetModelType: assetModelType, 
            clientToken: clientToken, 
            tags: tags
        )
        return try await self.createAssetModel(input, logger: logger)
    }

    /// Creates a custom composite model from specified property and hierarchy definitions. There are two types of custom composite models, inline and component-model-based.  Use component-model-based custom composite models to define standard, reusable components. A component-model-based custom composite model consists of a name, a description, and the ID of the component model it references. A component-model-based custom composite model has no properties of its own; its referenced component model provides its associated properties to any created assets. For more information, see Custom composite models (Components) in the IoT SiteWise User Guide. Use inline custom composite models to organize the properties of an asset model. The properties of inline custom composite models are local to the asset model where they are included and can't be used to create multiple assets. To create a component-model-based model, specify the composedAssetModelId of an existing asset model with assetModelType of COMPONENT_MODEL. To create an inline model, specify the assetModelCompositeModelProperties and don't include an composedAssetModelId.
    @Sendable
    @inlinable
    public func createAssetModelCompositeModel(_ input: CreateAssetModelCompositeModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssetModelCompositeModelResponse {
        try await self.client.execute(
            operation: "CreateAssetModelCompositeModel", 
            path: "/asset-models/{assetModelId}/composite-models", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a custom composite model from specified property and hierarchy definitions. There are two types of custom composite models, inline and component-model-based.  Use component-model-based custom composite models to define standard, reusable components. A component-model-based custom composite model consists of a name, a description, and the ID of the component model it references. A component-model-based custom composite model has no properties of its own; its referenced component model provides its associated properties to any created assets. For more information, see Custom composite models (Components) in the IoT SiteWise User Guide. Use inline custom composite models to organize the properties of an asset model. The properties of inline custom composite models are local to the asset model where they are included and can't be used to create multiple assets. To create a component-model-based model, specify the composedAssetModelId of an existing asset model with assetModelType of COMPONENT_MODEL. To create an inline model, specify the assetModelCompositeModelProperties and don't include an composedAssetModelId.
    ///
    /// Parameters:
    ///   - assetModelCompositeModelDescription: A description for the composite model.
    ///   - assetModelCompositeModelExternalId: An external ID to assign to the composite model. If the composite model is a derived composite model, or one nested inside a component model, you can only set the external ID using UpdateAssetModelCompositeModel and specifying the derived ID of the model or property from the created model it's a part of.
    ///   - assetModelCompositeModelId: The ID of the composite model. IoT SiteWise automatically generates a unique ID for you, so this parameter is never required. However, if you prefer to supply your own ID instead, you can specify it here in UUID format. If you specify your own ID, it must be globally unique.
    ///   - assetModelCompositeModelName: A unique name for the composite model.
    ///   - assetModelCompositeModelProperties: The property definitions of the composite model. For more information, see  Inline custom composite models in the IoT SiteWise User Guide. You can specify up to 200 properties per composite model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - assetModelCompositeModelType: The composite model type. Valid values are AWS/ALARM, CUSTOM, or  AWS/L4E_ANOMALY.
    ///   - assetModelId: The ID of the asset model this composite model is a part of.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - composedAssetModelId: The ID of a component model which is reused to create this composite model.
    ///   - ifMatch: The expected current entity tag (ETag) for the asset model’s latest or active version (specified using matchForVersionType).    The create request is rejected if the tag does not match the latest or active version's current entity tag. See Optimistic locking for asset model writes in the IoT SiteWise User Guide.
    ///   - ifNoneMatch: Accepts * to reject the create request if an active version  (specified using matchForVersionType as ACTIVE) already exists for the asset model.
    ///   - matchForVersionType: Specifies the asset model version type (LATEST or ACTIVE) used in  conjunction with If-Match or If-None-Match headers to determine the target ETag for the create operation.
    ///   - parentAssetModelCompositeModelId: The ID of the parent composite model in this asset model relationship.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssetModelCompositeModel(
        assetModelCompositeModelDescription: String? = nil,
        assetModelCompositeModelExternalId: String? = nil,
        assetModelCompositeModelId: String? = nil,
        assetModelCompositeModelName: String,
        assetModelCompositeModelProperties: [AssetModelPropertyDefinition]? = nil,
        assetModelCompositeModelType: String,
        assetModelId: String,
        clientToken: String? = CreateAssetModelCompositeModelRequest.idempotencyToken(),
        composedAssetModelId: String? = nil,
        ifMatch: String? = nil,
        ifNoneMatch: String? = nil,
        matchForVersionType: AssetModelVersionType? = nil,
        parentAssetModelCompositeModelId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssetModelCompositeModelResponse {
        let input = CreateAssetModelCompositeModelRequest(
            assetModelCompositeModelDescription: assetModelCompositeModelDescription, 
            assetModelCompositeModelExternalId: assetModelCompositeModelExternalId, 
            assetModelCompositeModelId: assetModelCompositeModelId, 
            assetModelCompositeModelName: assetModelCompositeModelName, 
            assetModelCompositeModelProperties: assetModelCompositeModelProperties, 
            assetModelCompositeModelType: assetModelCompositeModelType, 
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            composedAssetModelId: composedAssetModelId, 
            ifMatch: ifMatch, 
            ifNoneMatch: ifNoneMatch, 
            matchForVersionType: matchForVersionType, 
            parentAssetModelCompositeModelId: parentAssetModelCompositeModelId
        )
        return try await self.createAssetModelCompositeModel(input, logger: logger)
    }

    /// Defines a job to ingest data to IoT SiteWise from Amazon S3. For more information, see Create a bulk import job (CLI) in the Amazon Simple Storage Service User Guide.  Before you create a bulk import job, you must enable IoT SiteWise warm tier or IoT SiteWise cold tier. For more information about how to configure storage settings, see PutStorageConfiguration. Bulk import is designed to store historical data to IoT SiteWise.   Newly ingested data in the hot tier triggers notifications and computations.   After data moves from the hot tier to the warm or cold tier based on retention settings, it does not trigger computations or notifications.   Data older than 7 days does not trigger computations or notifications.
    @Sendable
    @inlinable
    public func createBulkImportJob(_ input: CreateBulkImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBulkImportJobResponse {
        try await self.client.execute(
            operation: "CreateBulkImportJob", 
            path: "/jobs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Defines a job to ingest data to IoT SiteWise from Amazon S3. For more information, see Create a bulk import job (CLI) in the Amazon Simple Storage Service User Guide.  Before you create a bulk import job, you must enable IoT SiteWise warm tier or IoT SiteWise cold tier. For more information about how to configure storage settings, see PutStorageConfiguration. Bulk import is designed to store historical data to IoT SiteWise.   Newly ingested data in the hot tier triggers notifications and computations.   After data moves from the hot tier to the warm or cold tier based on retention settings, it does not trigger computations or notifications.   Data older than 7 days does not trigger computations or notifications.
    ///
    /// Parameters:
    ///   - adaptiveIngestion: If set to true, ingest new data into IoT SiteWise storage. Measurements with notifications, metrics and transforms are  computed. If set to false, historical data is ingested into IoT SiteWise as is.
    ///   - deleteFilesAfterImport: If set to true, your data files is deleted from S3, after ingestion into IoT SiteWise storage.
    ///   - errorReportLocation: The Amazon S3 destination where errors associated with the job creation request are saved.
    ///   - files: The files in the specified Amazon S3 bucket that contain your data.
    ///   - jobConfiguration: Contains the configuration information of a job, such as the file format used to save data in Amazon S3.
    ///   - jobName: The unique name that helps identify the job request.
    ///   - jobRoleArn: The ARN of the IAM role that allows IoT SiteWise to read Amazon S3 data.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBulkImportJob(
        adaptiveIngestion: Bool? = nil,
        deleteFilesAfterImport: Bool? = nil,
        errorReportLocation: ErrorReportLocation,
        files: [File],
        jobConfiguration: JobConfiguration,
        jobName: String,
        jobRoleArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBulkImportJobResponse {
        let input = CreateBulkImportJobRequest(
            adaptiveIngestion: adaptiveIngestion, 
            deleteFilesAfterImport: deleteFilesAfterImport, 
            errorReportLocation: errorReportLocation, 
            files: files, 
            jobConfiguration: jobConfiguration, 
            jobName: jobName, 
            jobRoleArn: jobRoleArn
        )
        return try await self.createBulkImportJob(input, logger: logger)
    }

    /// Create a computation model with a configuration and data binding.
    @Sendable
    @inlinable
    public func createComputationModel(_ input: CreateComputationModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateComputationModelResponse {
        try await self.client.execute(
            operation: "CreateComputationModel", 
            path: "/computation-models", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Create a computation model with a configuration and data binding.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - computationModelConfiguration: The configuration for the computation model.
    ///   - computationModelDataBinding: The data binding for the computation model. Key is a variable name defined in configuration.  Value is a ComputationModelDataBindingValue referenced by the variable.
    ///   - computationModelDescription: The description of the computation model.
    ///   - computationModelName: The name of the computation model.
    ///   - tags: A list of key-value pairs that contain metadata for the asset. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createComputationModel(
        clientToken: String? = CreateComputationModelRequest.idempotencyToken(),
        computationModelConfiguration: ComputationModelConfiguration,
        computationModelDataBinding: [String: ComputationModelDataBindingValue],
        computationModelDescription: String? = nil,
        computationModelName: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateComputationModelResponse {
        let input = CreateComputationModelRequest(
            clientToken: clientToken, 
            computationModelConfiguration: computationModelConfiguration, 
            computationModelDataBinding: computationModelDataBinding, 
            computationModelDescription: computationModelDescription, 
            computationModelName: computationModelName, 
            tags: tags
        )
        return try await self.createComputationModel(input, logger: logger)
    }

    /// Creates a dashboard in an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func createDashboard(_ input: CreateDashboardRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDashboardResponse {
        try await self.client.execute(
            operation: "CreateDashboard", 
            path: "/dashboards", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Creates a dashboard in an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - dashboardDefinition: The dashboard definition specified in a JSON literal.   IoT SiteWise Monitor (Classic) see Create dashboards (CLI)    IoT SiteWise Monitor (AI-aware) see Create dashboards (CLI)    in the IoT SiteWise User Guide
    ///   - dashboardDescription: A description for the dashboard.
    ///   - dashboardName: A friendly name for the dashboard.
    ///   - projectId: The ID of the project in which to create the dashboard.
    ///   - tags: A list of key-value pairs that contain metadata for the dashboard. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDashboard(
        clientToken: String? = CreateDashboardRequest.idempotencyToken(),
        dashboardDefinition: String,
        dashboardDescription: String? = nil,
        dashboardName: String,
        projectId: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDashboardResponse {
        let input = CreateDashboardRequest(
            clientToken: clientToken, 
            dashboardDefinition: dashboardDefinition, 
            dashboardDescription: dashboardDescription, 
            dashboardName: dashboardName, 
            projectId: projectId, 
            tags: tags
        )
        return try await self.createDashboard(input, logger: logger)
    }

    /// Creates a dataset to connect an external datasource.
    @Sendable
    @inlinable
    public func createDataset(_ input: CreateDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetResponse {
        try await self.client.execute(
            operation: "CreateDataset", 
            path: "/datasets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a dataset to connect an external datasource.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - datasetDescription: A description about the dataset, and its functionality.
    ///   - datasetId: The ID of the dataset.
    ///   - datasetName: The name of the dataset.
    ///   - datasetSource: The data source for the dataset.
    ///   - tags: A list of key-value pairs that contain metadata for the access policy. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataset(
        clientToken: String? = CreateDatasetRequest.idempotencyToken(),
        datasetDescription: String? = nil,
        datasetId: String? = nil,
        datasetName: String,
        datasetSource: DatasetSource,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetResponse {
        let input = CreateDatasetRequest(
            clientToken: clientToken, 
            datasetDescription: datasetDescription, 
            datasetId: datasetId, 
            datasetName: datasetName, 
            datasetSource: datasetSource, 
            tags: tags
        )
        return try await self.createDataset(input, logger: logger)
    }

    /// Creates a gateway, which is a virtual or edge device that delivers industrial data streams from local servers to IoT SiteWise. For more information, see Ingesting data using a gateway in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func createGateway(_ input: CreateGatewayRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateGatewayResponse {
        try await self.client.execute(
            operation: "CreateGateway", 
            path: "/20200301/gateways", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates a gateway, which is a virtual or edge device that delivers industrial data streams from local servers to IoT SiteWise. For more information, see Ingesting data using a gateway in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - gatewayName: A unique name for the gateway.
    ///   - gatewayPlatform: The gateway's platform. You can only specify one platform in a gateway.
    ///   - gatewayVersion: The version of the gateway to create. Specify 3 to create an MQTT-enabled, V3 gateway and 2 to create a Classic streams, V2 gateway. If not specified, the default is 2 (Classic streams, V2 gateway).  When creating a V3 gateway (gatewayVersion=3) with the GreengrassV2 platform, you must also specify the coreDeviceOperatingSystem parameter.  We recommend creating an MQTT-enabled gateway for self-hosted gateways and Siemens Industrial Edge gateways. For more information on gateway versions, see Use Amazon Web Services IoT SiteWise Edge Edge gateways.
    ///   - tags: A list of key-value pairs that contain metadata for the gateway. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createGateway(
        gatewayName: String,
        gatewayPlatform: GatewayPlatform,
        gatewayVersion: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateGatewayResponse {
        let input = CreateGatewayRequest(
            gatewayName: gatewayName, 
            gatewayPlatform: gatewayPlatform, 
            gatewayVersion: gatewayVersion, 
            tags: tags
        )
        return try await self.createGateway(input, logger: logger)
    }

    /// Creates a portal, which can contain projects and dashboards. IoT SiteWise Monitor uses IAM Identity Center or IAM to authenticate portal users and manage user permissions.  Before you can sign in to a new portal, you must add at least one identity to that portal. For more information, see Adding or removing portal administrators in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func createPortal(_ input: CreatePortalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePortalResponse {
        try await self.client.execute(
            operation: "CreatePortal", 
            path: "/portals", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Creates a portal, which can contain projects and dashboards. IoT SiteWise Monitor uses IAM Identity Center or IAM to authenticate portal users and manage user permissions.  Before you can sign in to a new portal, you must add at least one identity to that portal. For more information, see Adding or removing portal administrators in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - alarms: Contains the configuration information of an alarm created in an IoT SiteWise Monitor portal. You can use the alarm to monitor an asset property and get notified when the asset property value is outside a specified range. For more information, see Monitoring with alarms in the IoT SiteWise Application Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - notificationSenderEmail: The email address that sends alarm notifications.  If you use the IoT Events managed Lambda function to manage your emails, you must verify the sender email address in Amazon SES.
    ///   - portalAuthMode: The service to use to authenticate users to the portal. Choose from the following options:    SSO – The portal uses IAM Identity Center to authenticate users and manage user permissions. Before you can create a portal that uses IAM Identity Center, you must enable IAM Identity Center. For more information, see Enabling IAM Identity Center in the IoT SiteWise User Guide. This option is only available in Amazon Web Services Regions other than the China Regions.    IAM – The portal uses Identity and Access Management to authenticate users and manage user permissions.   You can't change this value after you create a portal. Default: SSO
    ///   - portalContactEmail: The Amazon Web Services administrator's contact email address.
    ///   - portalDescription: A description for the portal.
    ///   - portalLogoImageFile: A logo image to display in the portal. Upload a square, high-resolution image. The image is displayed on a dark background.
    ///   - portalName: A friendly name for the portal.
    ///   - portalType: Define the type of portal. The value for IoT SiteWise Monitor (Classic) is SITEWISE_PORTAL_V1. The value for IoT SiteWise Monitor (AI-aware) is SITEWISE_PORTAL_V2.
    ///   - portalTypeConfiguration: The configuration entry associated with the specific portal type. The value for IoT SiteWise Monitor (Classic) is SITEWISE_PORTAL_V1. The value for IoT SiteWise Monitor (AI-aware) is SITEWISE_PORTAL_V2.
    ///   - roleArn: The ARN of a service role that allows the portal's users to access your IoT SiteWise resources on your behalf. For more information, see Using service roles for IoT SiteWise Monitor in the IoT SiteWise User Guide.
    ///   - tags: A list of key-value pairs that contain metadata for the portal. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createPortal(
        alarms: Alarms? = nil,
        clientToken: String? = CreatePortalRequest.idempotencyToken(),
        notificationSenderEmail: String? = nil,
        portalAuthMode: AuthMode? = nil,
        portalContactEmail: String,
        portalDescription: String? = nil,
        portalLogoImageFile: ImageFile? = nil,
        portalName: String,
        portalType: PortalType? = nil,
        portalTypeConfiguration: [String: PortalTypeEntry]? = nil,
        roleArn: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePortalResponse {
        let input = CreatePortalRequest(
            alarms: alarms, 
            clientToken: clientToken, 
            notificationSenderEmail: notificationSenderEmail, 
            portalAuthMode: portalAuthMode, 
            portalContactEmail: portalContactEmail, 
            portalDescription: portalDescription, 
            portalLogoImageFile: portalLogoImageFile, 
            portalName: portalName, 
            portalType: portalType, 
            portalTypeConfiguration: portalTypeConfiguration, 
            roleArn: roleArn, 
            tags: tags
        )
        return try await self.createPortal(input, logger: logger)
    }

    /// Creates a project in the specified portal.  Make sure that the project name and description don't contain confidential information.
    @Sendable
    @inlinable
    public func createProject(_ input: CreateProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateProjectResponse {
        try await self.client.execute(
            operation: "CreateProject", 
            path: "/projects", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Creates a project in the specified portal.  Make sure that the project name and description don't contain confidential information.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - portalId: The ID of the portal in which to create the project.
    ///   - projectDescription: A description for the project.
    ///   - projectName: A friendly name for the project.
    ///   - tags: A list of key-value pairs that contain metadata for the project. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createProject(
        clientToken: String? = CreateProjectRequest.idempotencyToken(),
        portalId: String,
        projectDescription: String? = nil,
        projectName: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateProjectResponse {
        let input = CreateProjectRequest(
            clientToken: clientToken, 
            portalId: portalId, 
            projectDescription: projectDescription, 
            projectName: projectName, 
            tags: tags
        )
        return try await self.createProject(input, logger: logger)
    }

    /// Deletes an access policy that grants the specified identity access to the specified IoT SiteWise Monitor resource. You can use this operation to revoke access to an IoT SiteWise Monitor resource.
    @Sendable
    @inlinable
    public func deleteAccessPolicy(_ input: DeleteAccessPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAccessPolicyResponse {
        try await self.client.execute(
            operation: "DeleteAccessPolicy", 
            path: "/access-policies/{accessPolicyId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Deletes an access policy that grants the specified identity access to the specified IoT SiteWise Monitor resource. You can use this operation to revoke access to an IoT SiteWise Monitor resource.
    ///
    /// Parameters:
    ///   - accessPolicyId: The ID of the access policy to be deleted.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAccessPolicy(
        accessPolicyId: String,
        clientToken: String? = DeleteAccessPolicyRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAccessPolicyResponse {
        let input = DeleteAccessPolicyRequest(
            accessPolicyId: accessPolicyId, 
            clientToken: clientToken
        )
        return try await self.deleteAccessPolicy(input, logger: logger)
    }

    /// Deletes an asset. This action can't be undone. For more information, see Deleting assets and models in the IoT SiteWise User Guide.  You can't delete an asset that's associated to another asset. For more information, see DisassociateAssets.
    @Sendable
    @inlinable
    public func deleteAsset(_ input: DeleteAssetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAssetResponse {
        try await self.client.execute(
            operation: "DeleteAsset", 
            path: "/assets/{assetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes an asset. This action can't be undone. For more information, see Deleting assets and models in the IoT SiteWise User Guide.  You can't delete an asset that's associated to another asset. For more information, see DisassociateAssets.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset to delete. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAsset(
        assetId: String,
        clientToken: String? = DeleteAssetRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAssetResponse {
        let input = DeleteAssetRequest(
            assetId: assetId, 
            clientToken: clientToken
        )
        return try await self.deleteAsset(input, logger: logger)
    }

    /// Deletes an asset model. This action can't be undone. You must delete all assets created from an asset model before you can delete the model. Also, you can't delete an asset model if a parent asset model exists that contains a property formula expression that depends on the asset model that you want to delete. For more information, see Deleting assets and models in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func deleteAssetModel(_ input: DeleteAssetModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAssetModelResponse {
        try await self.client.execute(
            operation: "DeleteAssetModel", 
            path: "/asset-models/{assetModelId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes an asset model. This action can't be undone. You must delete all assets created from an asset model before you can delete the model. Also, you can't delete an asset model if a parent asset model exists that contains a property formula expression that depends on the asset model that you want to delete. For more information, see Deleting assets and models in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model to delete. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - ifMatch: The expected current entity tag (ETag) for the asset model’s latest or active version (specified using matchForVersionType).    The delete request is rejected if the tag does not match the latest or active version's current entity tag. See Optimistic locking for asset model writes in the IoT SiteWise User Guide.
    ///   - ifNoneMatch: Accepts * to reject the delete request if an active version  (specified using matchForVersionType as ACTIVE) already exists for the asset model.
    ///   - matchForVersionType: Specifies the asset model version type (LATEST or ACTIVE) used in  conjunction with If-Match or If-None-Match headers to determine the target ETag for the delete operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssetModel(
        assetModelId: String,
        clientToken: String? = DeleteAssetModelRequest.idempotencyToken(),
        ifMatch: String? = nil,
        ifNoneMatch: String? = nil,
        matchForVersionType: AssetModelVersionType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAssetModelResponse {
        let input = DeleteAssetModelRequest(
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            ifMatch: ifMatch, 
            ifNoneMatch: ifNoneMatch, 
            matchForVersionType: matchForVersionType
        )
        return try await self.deleteAssetModel(input, logger: logger)
    }

    /// Deletes a composite model. This action can't be undone. You must delete all assets created from a composite model before you can delete the model. Also, you can't delete a composite model if a parent asset model exists that contains a property formula expression that depends on the asset model that you want to delete. For more information, see Deleting assets and models in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func deleteAssetModelCompositeModel(_ input: DeleteAssetModelCompositeModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAssetModelCompositeModelResponse {
        try await self.client.execute(
            operation: "DeleteAssetModelCompositeModel", 
            path: "/asset-models/{assetModelId}/composite-models/{assetModelCompositeModelId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a composite model. This action can't be undone. You must delete all assets created from a composite model before you can delete the model. Also, you can't delete a composite model if a parent asset model exists that contains a property formula expression that depends on the asset model that you want to delete. For more information, see Deleting assets and models in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetModelCompositeModelId: The ID of a composite model on this asset model.
    ///   - assetModelId: The ID of the asset model, in UUID format.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - ifMatch: The expected current entity tag (ETag) for the asset model’s latest or active version (specified using matchForVersionType).    The delete request is rejected if the tag does not match the latest or active version's current entity tag. See Optimistic locking for asset model writes in the IoT SiteWise User Guide.
    ///   - ifNoneMatch: Accepts * to reject the delete request if an active version  (specified using matchForVersionType as ACTIVE) already exists for the asset model.
    ///   - matchForVersionType: Specifies the asset model version type (LATEST or ACTIVE) used in  conjunction with If-Match or If-None-Match headers to determine the target ETag for the delete operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssetModelCompositeModel(
        assetModelCompositeModelId: String,
        assetModelId: String,
        clientToken: String? = DeleteAssetModelCompositeModelRequest.idempotencyToken(),
        ifMatch: String? = nil,
        ifNoneMatch: String? = nil,
        matchForVersionType: AssetModelVersionType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAssetModelCompositeModelResponse {
        let input = DeleteAssetModelCompositeModelRequest(
            assetModelCompositeModelId: assetModelCompositeModelId, 
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            ifMatch: ifMatch, 
            ifNoneMatch: ifNoneMatch, 
            matchForVersionType: matchForVersionType
        )
        return try await self.deleteAssetModelCompositeModel(input, logger: logger)
    }

    /// Deletes an interface relationship between an asset model and an interface asset model.
    @Sendable
    @inlinable
    public func deleteAssetModelInterfaceRelationship(_ input: DeleteAssetModelInterfaceRelationshipRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAssetModelInterfaceRelationshipResponse {
        try await self.client.execute(
            operation: "DeleteAssetModelInterfaceRelationship", 
            path: "/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes an interface relationship between an asset model and an interface asset model.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - interfaceAssetModelId: The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssetModelInterfaceRelationship(
        assetModelId: String,
        clientToken: String? = DeleteAssetModelInterfaceRelationshipRequest.idempotencyToken(),
        interfaceAssetModelId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAssetModelInterfaceRelationshipResponse {
        let input = DeleteAssetModelInterfaceRelationshipRequest(
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            interfaceAssetModelId: interfaceAssetModelId
        )
        return try await self.deleteAssetModelInterfaceRelationship(input, logger: logger)
    }

    /// Deletes a computation model. This action can't be undone.
    @Sendable
    @inlinable
    public func deleteComputationModel(_ input: DeleteComputationModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteComputationModelResponse {
        try await self.client.execute(
            operation: "DeleteComputationModel", 
            path: "/computation-models/{computationModelId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a computation model. This action can't be undone.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - computationModelId: The ID of the computation model.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteComputationModel(
        clientToken: String? = DeleteComputationModelRequest.idempotencyToken(),
        computationModelId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteComputationModelResponse {
        let input = DeleteComputationModelRequest(
            clientToken: clientToken, 
            computationModelId: computationModelId
        )
        return try await self.deleteComputationModel(input, logger: logger)
    }

    /// Deletes a dashboard from IoT SiteWise Monitor.
    @Sendable
    @inlinable
    public func deleteDashboard(_ input: DeleteDashboardRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDashboardResponse {
        try await self.client.execute(
            operation: "DeleteDashboard", 
            path: "/dashboards/{dashboardId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Deletes a dashboard from IoT SiteWise Monitor.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - dashboardId: The ID of the dashboard to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDashboard(
        clientToken: String? = DeleteDashboardRequest.idempotencyToken(),
        dashboardId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDashboardResponse {
        let input = DeleteDashboardRequest(
            clientToken: clientToken, 
            dashboardId: dashboardId
        )
        return try await self.deleteDashboard(input, logger: logger)
    }

    /// Deletes a dataset. This cannot be undone.
    @Sendable
    @inlinable
    public func deleteDataset(_ input: DeleteDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDatasetResponse {
        try await self.client.execute(
            operation: "DeleteDataset", 
            path: "/datasets/{datasetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a dataset. This cannot be undone.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - datasetId: The ID of the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDataset(
        clientToken: String? = DeleteDatasetRequest.idempotencyToken(),
        datasetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDatasetResponse {
        let input = DeleteDatasetRequest(
            clientToken: clientToken, 
            datasetId: datasetId
        )
        return try await self.deleteDataset(input, logger: logger)
    }

    /// Deletes a gateway from IoT SiteWise. When you delete a gateway, some of the gateway's files remain in your gateway's file system.
    @Sendable
    @inlinable
    public func deleteGateway(_ input: DeleteGatewayRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteGateway", 
            path: "/20200301/gateways/{gatewayId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a gateway from IoT SiteWise. When you delete a gateway, some of the gateway's files remain in your gateway's file system.
    ///
    /// Parameters:
    ///   - gatewayId: The ID of the gateway to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteGateway(
        gatewayId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteGatewayRequest(
            gatewayId: gatewayId
        )
        return try await self.deleteGateway(input, logger: logger)
    }

    /// Deletes a portal from IoT SiteWise Monitor.
    @Sendable
    @inlinable
    public func deletePortal(_ input: DeletePortalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePortalResponse {
        try await self.client.execute(
            operation: "DeletePortal", 
            path: "/portals/{portalId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Deletes a portal from IoT SiteWise Monitor.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - portalId: The ID of the portal to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePortal(
        clientToken: String? = DeletePortalRequest.idempotencyToken(),
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePortalResponse {
        let input = DeletePortalRequest(
            clientToken: clientToken, 
            portalId: portalId
        )
        return try await self.deletePortal(input, logger: logger)
    }

    /// Deletes a project from IoT SiteWise Monitor.
    @Sendable
    @inlinable
    public func deleteProject(_ input: DeleteProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteProjectResponse {
        try await self.client.execute(
            operation: "DeleteProject", 
            path: "/projects/{projectId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Deletes a project from IoT SiteWise Monitor.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - projectId: The ID of the project.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteProject(
        clientToken: String? = DeleteProjectRequest.idempotencyToken(),
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteProjectResponse {
        let input = DeleteProjectRequest(
            clientToken: clientToken, 
            projectId: projectId
        )
        return try await self.deleteProject(input, logger: logger)
    }

    /// Deletes a time series (data stream). If you delete a time series that's associated with an asset property, the asset property still exists, but the time series will no longer be associated with this asset property. To identify a time series, do one of the following:   If the time series isn't associated with an asset property, specify the alias of the time series.   If the time series is associated with an asset property, specify one of the following:    The alias of the time series.   The assetId and propertyId that identifies the asset property.
    @Sendable
    @inlinable
    public func deleteTimeSeries(_ input: DeleteTimeSeriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteTimeSeries", 
            path: "/timeseries/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Deletes a time series (data stream). If you delete a time series that's associated with an asset property, the asset property still exists, but the time series will no longer be associated with this asset property. To identify a time series, do one of the following:   If the time series isn't associated with an asset property, specify the alias of the time series.   If the time series is associated with an asset property, specify one of the following:    The alias of the time series.   The assetId and propertyId that identifies the asset property.
    ///
    /// Parameters:
    ///   - alias: The alias that identifies the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - propertyId: The ID of the asset property. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteTimeSeries(
        alias: String? = nil,
        assetId: String? = nil,
        clientToken: String? = DeleteTimeSeriesRequest.idempotencyToken(),
        propertyId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteTimeSeriesRequest(
            alias: alias, 
            assetId: assetId, 
            clientToken: clientToken, 
            propertyId: propertyId
        )
        return try await self.deleteTimeSeries(input, logger: logger)
    }

    /// Describes an access policy, which specifies an identity's access to an IoT SiteWise Monitor portal or project.
    @Sendable
    @inlinable
    public func describeAccessPolicy(_ input: DescribeAccessPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAccessPolicyResponse {
        try await self.client.execute(
            operation: "DescribeAccessPolicy", 
            path: "/access-policies/{accessPolicyId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Describes an access policy, which specifies an identity's access to an IoT SiteWise Monitor portal or project.
    ///
    /// Parameters:
    ///   - accessPolicyId: The ID of the access policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccessPolicy(
        accessPolicyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAccessPolicyResponse {
        let input = DescribeAccessPolicyRequest(
            accessPolicyId: accessPolicyId
        )
        return try await self.describeAccessPolicy(input, logger: logger)
    }

    /// Retrieves information about an action.
    @Sendable
    @inlinable
    public func describeAction(_ input: DescribeActionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeActionResponse {
        try await self.client.execute(
            operation: "DescribeAction", 
            path: "/actions/{actionId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an action.
    ///
    /// Parameters:
    ///   - actionId: The ID of the action.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAction(
        actionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeActionResponse {
        let input = DescribeActionRequest(
            actionId: actionId
        )
        return try await self.describeAction(input, logger: logger)
    }

    /// Retrieves information about an asset.
    @Sendable
    @inlinable
    public func describeAsset(_ input: DescribeAssetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetResponse {
        try await self.client.execute(
            operation: "DescribeAsset", 
            path: "/assets/{assetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an asset.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset properties from the response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAsset(
        assetId: String,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetResponse {
        let input = DescribeAssetRequest(
            assetId: assetId, 
            excludeProperties: excludeProperties
        )
        return try await self.describeAsset(input, logger: logger)
    }

    /// Retrieves information about an asset composite model (also known as an asset component). An AssetCompositeModel is an instance of an AssetModelCompositeModel. If you want to see information about the model this is based on, call DescribeAssetModelCompositeModel.
    @Sendable
    @inlinable
    public func describeAssetCompositeModel(_ input: DescribeAssetCompositeModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetCompositeModelResponse {
        try await self.client.execute(
            operation: "DescribeAssetCompositeModel", 
            path: "/assets/{assetId}/composite-models/{assetCompositeModelId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an asset composite model (also known as an asset component). An AssetCompositeModel is an instance of an AssetModelCompositeModel. If you want to see information about the model this is based on, call DescribeAssetModelCompositeModel.
    ///
    /// Parameters:
    ///   - assetCompositeModelId: The ID of a composite model on this asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssetCompositeModel(
        assetCompositeModelId: String,
        assetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetCompositeModelResponse {
        let input = DescribeAssetCompositeModelRequest(
            assetCompositeModelId: assetCompositeModelId, 
            assetId: assetId
        )
        return try await self.describeAssetCompositeModel(input, logger: logger)
    }

    /// Retrieves information about an asset model. This includes details about the asset model's properties, hierarchies, composite models, and any interface relationships if the asset model implements interfaces.
    @Sendable
    @inlinable
    public func describeAssetModel(_ input: DescribeAssetModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetModelResponse {
        try await self.client.execute(
            operation: "DescribeAssetModel", 
            path: "/asset-models/{assetModelId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an asset model. This includes details about the asset model's properties, hierarchies, composite models, and any interface relationships if the asset model implements interfaces.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset model properties from the response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssetModel(
        assetModelId: String,
        assetModelVersion: String? = nil,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetModelResponse {
        let input = DescribeAssetModelRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            excludeProperties: excludeProperties
        )
        return try await self.describeAssetModel(input, logger: logger)
    }

    /// Retrieves information about an asset model composite model (also known as an asset model component). For more information, see Custom composite models (Components) in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func describeAssetModelCompositeModel(_ input: DescribeAssetModelCompositeModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetModelCompositeModelResponse {
        try await self.client.execute(
            operation: "DescribeAssetModelCompositeModel", 
            path: "/asset-models/{assetModelId}/composite-models/{assetModelCompositeModelId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an asset model composite model (also known as an asset model component). For more information, see Custom composite models (Components) in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetModelCompositeModelId: The ID of a composite model on this asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssetModelCompositeModel(
        assetModelCompositeModelId: String,
        assetModelId: String,
        assetModelVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetModelCompositeModelResponse {
        let input = DescribeAssetModelCompositeModelRequest(
            assetModelCompositeModelId: assetModelCompositeModelId, 
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion
        )
        return try await self.describeAssetModelCompositeModel(input, logger: logger)
    }

    /// Retrieves information about an interface relationship between an asset model and an interface asset model.
    @Sendable
    @inlinable
    public func describeAssetModelInterfaceRelationship(_ input: DescribeAssetModelInterfaceRelationshipRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetModelInterfaceRelationshipResponse {
        try await self.client.execute(
            operation: "DescribeAssetModelInterfaceRelationship", 
            path: "/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an interface relationship between an asset model and an interface asset model.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - interfaceAssetModelId: The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssetModelInterfaceRelationship(
        assetModelId: String,
        interfaceAssetModelId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetModelInterfaceRelationshipResponse {
        let input = DescribeAssetModelInterfaceRelationshipRequest(
            assetModelId: assetModelId, 
            interfaceAssetModelId: interfaceAssetModelId
        )
        return try await self.describeAssetModelInterfaceRelationship(input, logger: logger)
    }

    /// Retrieves information about an asset property.  When you call this operation for an attribute property, this response includes the default attribute value that you define in the asset model. If you update the default value in the model, this operation's response includes the new default value.  This operation doesn't return the value of the asset property. To get the value of an asset property, use GetAssetPropertyValue.
    @Sendable
    @inlinable
    public func describeAssetProperty(_ input: DescribeAssetPropertyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssetPropertyResponse {
        try await self.client.execute(
            operation: "DescribeAssetProperty", 
            path: "/assets/{assetId}/properties/{propertyId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about an asset property.  When you call this operation for an attribute property, this response includes the default attribute value that you define in the asset model. If you update the default value in the model, this operation's response includes the new default value.  This operation doesn't return the value of the asset property. To get the value of an asset property, use GetAssetPropertyValue.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssetProperty(
        assetId: String,
        propertyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssetPropertyResponse {
        let input = DescribeAssetPropertyRequest(
            assetId: assetId, 
            propertyId: propertyId
        )
        return try await self.describeAssetProperty(input, logger: logger)
    }

    /// Retrieves information about a bulk import job request. For more information, see Describe a bulk import job (CLI) in the Amazon Simple Storage Service User Guide.
    @Sendable
    @inlinable
    public func describeBulkImportJob(_ input: DescribeBulkImportJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBulkImportJobResponse {
        try await self.client.execute(
            operation: "DescribeBulkImportJob", 
            path: "/jobs/{jobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Retrieves information about a bulk import job request. For more information, see Describe a bulk import job (CLI) in the Amazon Simple Storage Service User Guide.
    ///
    /// Parameters:
    ///   - jobId: The ID of the job.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBulkImportJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBulkImportJobResponse {
        let input = DescribeBulkImportJobRequest(
            jobId: jobId
        )
        return try await self.describeBulkImportJob(input, logger: logger)
    }

    /// Retrieves information about a computation model.
    @Sendable
    @inlinable
    public func describeComputationModel(_ input: DescribeComputationModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeComputationModelResponse {
        try await self.client.execute(
            operation: "DescribeComputationModel", 
            path: "/computation-models/{computationModelId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a computation model.
    ///
    /// Parameters:
    ///   - computationModelId: The ID of the computation model.
    ///   - computationModelVersion: The version of the computation model.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeComputationModel(
        computationModelId: String,
        computationModelVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeComputationModelResponse {
        let input = DescribeComputationModelRequest(
            computationModelId: computationModelId, 
            computationModelVersion: computationModelVersion
        )
        return try await self.describeComputationModel(input, logger: logger)
    }

    /// Retrieves information about the execution summary of a computation model.
    @Sendable
    @inlinable
    public func describeComputationModelExecutionSummary(_ input: DescribeComputationModelExecutionSummaryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeComputationModelExecutionSummaryResponse {
        try await self.client.execute(
            operation: "DescribeComputationModelExecutionSummary", 
            path: "/computation-models/{computationModelId}/execution-summary", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about the execution summary of a computation model.
    ///
    /// Parameters:
    ///   - computationModelId: The ID of the computation model.
    ///   - resolveToResourceId: The ID of the resolved resource.
    ///   - resolveToResourceType: The type of the resolved resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeComputationModelExecutionSummary(
        computationModelId: String,
        resolveToResourceId: String? = nil,
        resolveToResourceType: ResolveToResourceType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeComputationModelExecutionSummaryResponse {
        let input = DescribeComputationModelExecutionSummaryRequest(
            computationModelId: computationModelId, 
            resolveToResourceId: resolveToResourceId, 
            resolveToResourceType: resolveToResourceType
        )
        return try await self.describeComputationModelExecutionSummary(input, logger: logger)
    }

    /// Retrieves information about a dashboard.
    @Sendable
    @inlinable
    public func describeDashboard(_ input: DescribeDashboardRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDashboardResponse {
        try await self.client.execute(
            operation: "DescribeDashboard", 
            path: "/dashboards/{dashboardId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves information about a dashboard.
    ///
    /// Parameters:
    ///   - dashboardId: The ID of the dashboard.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDashboard(
        dashboardId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDashboardResponse {
        let input = DescribeDashboardRequest(
            dashboardId: dashboardId
        )
        return try await self.describeDashboard(input, logger: logger)
    }

    /// Retrieves information about a dataset.
    @Sendable
    @inlinable
    public func describeDataset(_ input: DescribeDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetResponse {
        try await self.client.execute(
            operation: "DescribeDataset", 
            path: "/datasets/{datasetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a dataset.
    ///
    /// Parameters:
    ///   - datasetId: The ID of the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataset(
        datasetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetResponse {
        let input = DescribeDatasetRequest(
            datasetId: datasetId
        )
        return try await self.describeDataset(input, logger: logger)
    }

    /// Retrieves information about the default encryption configuration for the Amazon Web Services account in the default or specified Region. For more information, see Key management in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func describeDefaultEncryptionConfiguration(_ input: DescribeDefaultEncryptionConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDefaultEncryptionConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeDefaultEncryptionConfiguration", 
            path: "/configuration/account/encryption", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about the default encryption configuration for the Amazon Web Services account in the default or specified Region. For more information, see Key management in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDefaultEncryptionConfiguration(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDefaultEncryptionConfigurationResponse {
        let input = DescribeDefaultEncryptionConfigurationRequest(
        )
        return try await self.describeDefaultEncryptionConfiguration(input, logger: logger)
    }

    /// Retrieves information about the execution.
    @Sendable
    @inlinable
    public func describeExecution(_ input: DescribeExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeExecutionResponse {
        try await self.client.execute(
            operation: "DescribeExecution", 
            path: "/executions/{executionId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about the execution.
    ///
    /// Parameters:
    ///   - executionId: The ID of the execution.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeExecution(
        executionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeExecutionResponse {
        let input = DescribeExecutionRequest(
            executionId: executionId
        )
        return try await self.describeExecution(input, logger: logger)
    }

    /// Retrieves information about a gateway.
    @Sendable
    @inlinable
    public func describeGateway(_ input: DescribeGatewayRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeGatewayResponse {
        try await self.client.execute(
            operation: "DescribeGateway", 
            path: "/20200301/gateways/{gatewayId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a gateway.
    ///
    /// Parameters:
    ///   - gatewayId: The ID of the gateway device.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeGateway(
        gatewayId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeGatewayResponse {
        let input = DescribeGatewayRequest(
            gatewayId: gatewayId
        )
        return try await self.describeGateway(input, logger: logger)
    }

    /// Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability. . The namespace follows the format service:capability:version, where:    service - The service providing the capability, or iotsitewise.    capability - The specific capability type. Options include: opcuacollector for the OPC UA data source collector, or publisher for data publisher capability.    version - The version number of the capability. Option include 2 for Classic streams, V2 gateways, and 3 for MQTT-enabled, V3 gateways.   After updating a capability configuration, the sync status becomes OUT_OF_SYNC until the gateway processes the configuration.Use DescribeGatewayCapabilityConfiguration to check the sync status and verify the configuration was applied. A gateway can have multiple capability configurations with different namespaces.
    @Sendable
    @inlinable
    public func describeGatewayCapabilityConfiguration(_ input: DescribeGatewayCapabilityConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeGatewayCapabilityConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeGatewayCapabilityConfiguration", 
            path: "/20200301/gateways/{gatewayId}/capability/{capabilityNamespace}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability. . The namespace follows the format service:capability:version, where:    service - The service providing the capability, or iotsitewise.    capability - The specific capability type. Options include: opcuacollector for the OPC UA data source collector, or publisher for data publisher capability.    version - The version number of the capability. Option include 2 for Classic streams, V2 gateways, and 3 for MQTT-enabled, V3 gateways.   After updating a capability configuration, the sync status becomes OUT_OF_SYNC until the gateway processes the configuration.Use DescribeGatewayCapabilityConfiguration to check the sync status and verify the configuration was applied. A gateway can have multiple capability configurations with different namespaces.
    ///
    /// Parameters:
    ///   - capabilityNamespace: The namespace of the capability configuration. For example, if you configure OPC UA sources for an MQTT-enabled gateway, your OPC-UA capability configuration has the namespace iotsitewise:opcuacollector:3.
    ///   - gatewayId: The ID of the gateway that defines the capability configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeGatewayCapabilityConfiguration(
        capabilityNamespace: String,
        gatewayId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeGatewayCapabilityConfigurationResponse {
        let input = DescribeGatewayCapabilityConfigurationRequest(
            capabilityNamespace: capabilityNamespace, 
            gatewayId: gatewayId
        )
        return try await self.describeGatewayCapabilityConfiguration(input, logger: logger)
    }

    /// Retrieves the current IoT SiteWise logging options.
    @Sendable
    @inlinable
    public func describeLoggingOptions(_ input: DescribeLoggingOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeLoggingOptionsResponse {
        try await self.client.execute(
            operation: "DescribeLoggingOptions", 
            path: "/logging", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves the current IoT SiteWise logging options.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeLoggingOptions(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeLoggingOptionsResponse {
        let input = DescribeLoggingOptionsRequest(
        )
        return try await self.describeLoggingOptions(input, logger: logger)
    }

    /// Retrieves information about a portal.
    @Sendable
    @inlinable
    public func describePortal(_ input: DescribePortalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePortalResponse {
        try await self.client.execute(
            operation: "DescribePortal", 
            path: "/portals/{portalId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves information about a portal.
    ///
    /// Parameters:
    ///   - portalId: The ID of the portal.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePortal(
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePortalResponse {
        let input = DescribePortalRequest(
            portalId: portalId
        )
        return try await self.describePortal(input, logger: logger)
    }

    /// Retrieves information about a project.
    @Sendable
    @inlinable
    public func describeProject(_ input: DescribeProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeProjectResponse {
        try await self.client.execute(
            operation: "DescribeProject", 
            path: "/projects/{projectId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves information about a project.
    ///
    /// Parameters:
    ///   - projectId: The ID of the project.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeProject(
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeProjectResponse {
        let input = DescribeProjectRequest(
            projectId: projectId
        )
        return try await self.describeProject(input, logger: logger)
    }

    /// Retrieves information about the storage configuration for IoT SiteWise.
    @Sendable
    @inlinable
    public func describeStorageConfiguration(_ input: DescribeStorageConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeStorageConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeStorageConfiguration", 
            path: "/configuration/account/storage", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about the storage configuration for IoT SiteWise.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeStorageConfiguration(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeStorageConfigurationResponse {
        let input = DescribeStorageConfigurationRequest(
        )
        return try await self.describeStorageConfiguration(input, logger: logger)
    }

    /// Retrieves information about a time series (data stream). To identify a time series, do one of the following:   If the time series isn't associated with an asset property, specify the alias of the time series.   If the time series is associated with an asset property, specify one of the following:    The alias of the time series.   The assetId and propertyId that identifies the asset property.
    @Sendable
    @inlinable
    public func describeTimeSeries(_ input: DescribeTimeSeriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeTimeSeriesResponse {
        try await self.client.execute(
            operation: "DescribeTimeSeries", 
            path: "/timeseries/describe", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves information about a time series (data stream). To identify a time series, do one of the following:   If the time series isn't associated with an asset property, specify the alias of the time series.   If the time series is associated with an asset property, specify one of the following:    The alias of the time series.   The assetId and propertyId that identifies the asset property.
    ///
    /// Parameters:
    ///   - alias: The alias that identifies the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeTimeSeries(
        alias: String? = nil,
        assetId: String? = nil,
        propertyId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeTimeSeriesResponse {
        let input = DescribeTimeSeriesRequest(
            alias: alias, 
            assetId: assetId, 
            propertyId: propertyId
        )
        return try await self.describeTimeSeries(input, logger: logger)
    }

    /// Disassociates a child asset from the given parent asset through a hierarchy defined in the parent asset's model.
    @Sendable
    @inlinable
    public func disassociateAssets(_ input: DisassociateAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateAssets", 
            path: "/assets/{assetId}/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Disassociates a child asset from the given parent asset through a hierarchy defined in the parent asset's model.
    ///
    /// Parameters:
    ///   - assetId: The ID of the parent asset from which to disassociate the child asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - childAssetId: The ID of the child asset to disassociate. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - hierarchyId: The ID of a hierarchy in the parent asset's model. (This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.) Hierarchies allow different groupings of assets to be formed that all come from the same asset model. You can use the hierarchy ID to identify the correct asset to disassociate. For more information, see Asset hierarchies in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateAssets(
        assetId: String,
        childAssetId: String,
        clientToken: String? = DisassociateAssetsRequest.idempotencyToken(),
        hierarchyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisassociateAssetsRequest(
            assetId: assetId, 
            childAssetId: childAssetId, 
            clientToken: clientToken, 
            hierarchyId: hierarchyId
        )
        return try await self.disassociateAssets(input, logger: logger)
    }

    /// Disassociates a time series (data stream) from an asset property.
    @Sendable
    @inlinable
    public func disassociateTimeSeriesFromAssetProperty(_ input: DisassociateTimeSeriesFromAssetPropertyRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateTimeSeriesFromAssetProperty", 
            path: "/timeseries/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Disassociates a time series (data stream) from an asset property.
    ///
    /// Parameters:
    ///   - alias: The alias that identifies the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - propertyId: The ID of the asset property. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateTimeSeriesFromAssetProperty(
        alias: String,
        assetId: String,
        clientToken: String? = DisassociateTimeSeriesFromAssetPropertyRequest.idempotencyToken(),
        propertyId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisassociateTimeSeriesFromAssetPropertyRequest(
            alias: alias, 
            assetId: assetId, 
            clientToken: clientToken, 
            propertyId: propertyId
        )
        return try await self.disassociateTimeSeriesFromAssetProperty(input, logger: logger)
    }

    /// Executes an action on a target resource.
    @Sendable
    @inlinable
    public func executeAction(_ input: ExecuteActionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ExecuteActionResponse {
        try await self.client.execute(
            operation: "ExecuteAction", 
            path: "/actions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Executes an action on a target resource.
    ///
    /// Parameters:
    ///   - actionDefinitionId: The ID of the action definition.
    ///   - actionPayload: The JSON payload of the action.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - resolveTo: The detailed resource this action resolves to.
    ///   - targetResource: The resource the action will be taken on.
    ///   - logger: Logger use during operation
    @inlinable
    public func executeAction(
        actionDefinitionId: String,
        actionPayload: ActionPayload,
        clientToken: String? = nil,
        resolveTo: ResolveTo? = nil,
        targetResource: TargetResource,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExecuteActionResponse {
        let input = ExecuteActionRequest(
            actionDefinitionId: actionDefinitionId, 
            actionPayload: actionPayload, 
            clientToken: clientToken, 
            resolveTo: resolveTo, 
            targetResource: targetResource
        )
        return try await self.executeAction(input, logger: logger)
    }

    /// Run SQL queries to retrieve metadata and time-series data from asset models, assets, measurements, metrics, transforms, and aggregates.
    @Sendable
    @inlinable
    public func executeQuery(_ input: ExecuteQueryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ExecuteQueryResponse {
        try await self.client.execute(
            operation: "ExecuteQuery", 
            path: "/queries/execution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Run SQL queries to retrieve metadata and time-series data from asset models, assets, measurements, metrics, transforms, and aggregates.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - maxResults: The maximum number of results to return at one time.   Minimum is 1   Maximum is 20000   Default is 20000
    ///   - nextToken: The string that specifies the next page of results.
    ///   - queryStatement: The IoT SiteWise query statement.
    ///   - logger: Logger use during operation
    @inlinable
    public func executeQuery(
        clientToken: String? = ExecuteQueryRequest.idempotencyToken(),
        maxResults: Int? = nil,
        nextToken: String? = nil,
        queryStatement: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExecuteQueryResponse {
        let input = ExecuteQueryRequest(
            clientToken: clientToken, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            queryStatement: queryStatement
        )
        return try await self.executeQuery(input, logger: logger)
    }

    /// Gets aggregated values for an asset property. For more information, see Querying aggregates in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    @Sendable
    @inlinable
    public func getAssetPropertyAggregates(_ input: GetAssetPropertyAggregatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAssetPropertyAggregatesResponse {
        try await self.client.execute(
            operation: "GetAssetPropertyAggregates", 
            path: "/properties/aggregates", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets aggregated values for an asset property. For more information, see Querying aggregates in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    ///
    /// Parameters:
    ///   - aggregateTypes: The data aggregating function.
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endDate: The inclusive end of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 1 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 2500.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - qualities: The quality by which to filter asset data.
    ///   - resolution: The time interval over which to aggregate data.
    ///   - startDate: The exclusive start of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - timeOrdering: The chronological sorting order of the requested information. Default: ASCENDING
    ///   - logger: Logger use during operation
    @inlinable
    public func getAssetPropertyAggregates(
        aggregateTypes: [AggregateType],
        assetId: String? = nil,
        endDate: Date,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        qualities: [Quality]? = nil,
        resolution: String,
        startDate: Date,
        timeOrdering: TimeOrdering? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAssetPropertyAggregatesResponse {
        let input = GetAssetPropertyAggregatesRequest(
            aggregateTypes: aggregateTypes, 
            assetId: assetId, 
            endDate: endDate, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            qualities: qualities, 
            resolution: resolution, 
            startDate: startDate, 
            timeOrdering: timeOrdering
        )
        return try await self.getAssetPropertyAggregates(input, logger: logger)
    }

    /// Gets an asset property's current value. For more information, see Querying current values in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    @Sendable
    @inlinable
    public func getAssetPropertyValue(_ input: GetAssetPropertyValueRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAssetPropertyValueResponse {
        try await self.client.execute(
            operation: "GetAssetPropertyValue", 
            path: "/properties/latest", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets an asset property's current value. For more information, see Querying current values in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAssetPropertyValue(
        assetId: String? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAssetPropertyValueResponse {
        let input = GetAssetPropertyValueRequest(
            assetId: assetId, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId
        )
        return try await self.getAssetPropertyValue(input, logger: logger)
    }

    /// Gets the history of an asset property's values. For more information, see Querying historical values in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    @Sendable
    @inlinable
    public func getAssetPropertyValueHistory(_ input: GetAssetPropertyValueHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAssetPropertyValueHistoryResponse {
        try await self.client.execute(
            operation: "GetAssetPropertyValueHistory", 
            path: "/properties/history", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Gets the history of an asset property's values. For more information, see Querying historical values in the IoT SiteWise User Guide. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endDate: The inclusive end of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 4 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 20000.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - qualities: The quality by which to filter asset data.
    ///   - startDate: The exclusive start of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - timeOrdering: The chronological sorting order of the requested information. Default: ASCENDING
    ///   - logger: Logger use during operation
    @inlinable
    public func getAssetPropertyValueHistory(
        assetId: String? = nil,
        endDate: Date? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        qualities: [Quality]? = nil,
        startDate: Date? = nil,
        timeOrdering: TimeOrdering? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAssetPropertyValueHistoryResponse {
        let input = GetAssetPropertyValueHistoryRequest(
            assetId: assetId, 
            endDate: endDate, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            qualities: qualities, 
            startDate: startDate, 
            timeOrdering: timeOrdering
        )
        return try await self.getAssetPropertyValueHistory(input, logger: logger)
    }

    /// Get interpolated values for an asset property for a specified time interval, during a period of time. If your time series is missing data points during the specified time interval, you can use interpolation to estimate the missing data. For example, you can use this operation to return the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    @Sendable
    @inlinable
    public func getInterpolatedAssetPropertyValues(_ input: GetInterpolatedAssetPropertyValuesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInterpolatedAssetPropertyValuesResponse {
        try await self.client.execute(
            operation: "GetInterpolatedAssetPropertyValues", 
            path: "/properties/interpolated", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Get interpolated values for an asset property for a specified time interval, during a period of time. If your time series is missing data points during the specified time interval, you can use interpolation to estimate the missing data. For example, you can use this operation to return the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. To identify an asset property, you must specify one of the following:   The assetId and propertyId of an asset property.   A propertyAlias, which is a data stream alias (for example, /company/windfarm/3/turbine/7/temperature). To define an asset property's alias, see UpdateAssetProperty.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endTimeInSeconds: The inclusive end of the range from which to interpolate data, expressed in seconds in Unix epoch time.
    ///   - endTimeOffsetInNanos: The nanosecond offset converted from endTimeInSeconds.
    ///   - intervalInSeconds: The time interval in seconds over which to interpolate data. Each interval starts when the previous one ends.
    ///   - intervalWindowInSeconds: The query interval for the window, in seconds. IoT SiteWise computes each interpolated value by using data points from the timestamp of each interval, minus the window to the timestamp of each interval plus the window. If not specified, the window ranges between the start time minus the interval and the end time plus the interval.    If you specify a value for the intervalWindowInSeconds parameter, the value for the type parameter must be LINEAR_INTERPOLATION.   If a data point isn't found during the specified query window, IoT SiteWise won't return an interpolated value for the interval. This indicates that there's a gap in the ingested data points.    For example, you can get the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. If the interpolation starts on July 1, 2021, at 9 AM with a window of 2 hours, IoT SiteWise uses the data points from 7 AM (9 AM minus 2 hours) to 11 AM (9 AM plus 2 hours) on July 2, 2021 to compute the first interpolated value. Next, IoT SiteWise uses the data points from 7 AM (9 AM minus 2 hours) to 11 AM (9 AM plus 2 hours) on July 3, 2021 to compute the second interpolated value, and so on.
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 10.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - quality: The quality of the asset property value. You can use this parameter as a filter to choose only the asset property values that have a specific quality.
    ///   - startTimeInSeconds: The exclusive start of the range from which to interpolate data, expressed in seconds in Unix epoch time.
    ///   - startTimeOffsetInNanos: The nanosecond offset converted from startTimeInSeconds.
    ///   - type: The interpolation type. Valid values: LINEAR_INTERPOLATION | LOCF_INTERPOLATION     LINEAR_INTERPOLATION – Estimates missing data using linear interpolation. For example, you can use this operation to return the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. If the interpolation starts July 1, 2021, at 9 AM, IoT SiteWise returns the first interpolated value on July 2, 2021, at 9 AM, the second interpolated value on July 3, 2021, at 9 AM, and so on.    LOCF_INTERPOLATION – Estimates missing data using last observation carried forward interpolation If no data point is found for an interval, IoT SiteWise returns the last observed data point for the previous interval and carries forward this interpolated value until a new data point is found. For example, you can get the state of an on-off valve every 24 hours over a duration of 7 days. If the interpolation starts July 1, 2021, at 9 AM, IoT SiteWise returns the last observed data point between July 1, 2021, at 9 AM and July 2, 2021, at 9 AM as the first interpolated value. If a data point isn't found after 9 AM on July 2, 2021, IoT SiteWise uses the same interpolated value for the rest of the days.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInterpolatedAssetPropertyValues(
        assetId: String? = nil,
        endTimeInSeconds: Int64,
        endTimeOffsetInNanos: Int? = nil,
        intervalInSeconds: Int64,
        intervalWindowInSeconds: Int64? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        quality: Quality,
        startTimeInSeconds: Int64,
        startTimeOffsetInNanos: Int? = nil,
        type: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInterpolatedAssetPropertyValuesResponse {
        let input = GetInterpolatedAssetPropertyValuesRequest(
            assetId: assetId, 
            endTimeInSeconds: endTimeInSeconds, 
            endTimeOffsetInNanos: endTimeOffsetInNanos, 
            intervalInSeconds: intervalInSeconds, 
            intervalWindowInSeconds: intervalWindowInSeconds, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            quality: quality, 
            startTimeInSeconds: startTimeInSeconds, 
            startTimeOffsetInNanos: startTimeOffsetInNanos, 
            type: type
        )
        return try await self.getInterpolatedAssetPropertyValues(input, logger: logger)
    }

    /// Invokes SiteWise Assistant to start or continue a conversation.
    @Sendable
    @inlinable
    public func invokeAssistant(_ input: InvokeAssistantRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> InvokeAssistantResponse {
        try await self.client.execute(
            operation: "InvokeAssistant", 
            path: "/assistant/invocation", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Invokes SiteWise Assistant to start or continue a conversation.
    ///
    /// Parameters:
    ///   - conversationId: The ID assigned to a conversation. IoT SiteWise automatically generates a unique ID for you, and this parameter is never required.  However, if you prefer to have your own ID, you must specify it here in UUID format. If you specify your own ID, it must be globally unique.
    ///   - enableTrace: Specifies if to turn trace on or not. It is used to track the SiteWise Assistant's  reasoning, and data access process.
    ///   - message: A text message sent to the SiteWise Assistant by the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func invokeAssistant(
        conversationId: String? = nil,
        enableTrace: Bool? = nil,
        message: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InvokeAssistantResponse {
        let input = InvokeAssistantRequest(
            conversationId: conversationId, 
            enableTrace: enableTrace, 
            message: message
        )
        return try await self.invokeAssistant(input, logger: logger)
    }

    /// Retrieves a paginated list of access policies for an identity (an IAM Identity Center user, an IAM Identity Center group, or an IAM user) or an IoT SiteWise Monitor resource (a portal or project).
    @Sendable
    @inlinable
    public func listAccessPolicies(_ input: ListAccessPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccessPoliciesResponse {
        try await self.client.execute(
            operation: "ListAccessPolicies", 
            path: "/access-policies", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of access policies for an identity (an IAM Identity Center user, an IAM Identity Center group, or an IAM user) or an IoT SiteWise Monitor resource (a portal or project).
    ///
    /// Parameters:
    ///   - iamArn: The ARN of the IAM user. For more information, see IAM ARNs in the IAM User Guide. This parameter is required if you specify IAM for identityType.
    ///   - identityId: The ID of the identity. This parameter is required if you specify USER or GROUP for identityType.
    ///   - identityType: The type of identity (IAM Identity Center user, IAM Identity Center group, or IAM user). This parameter is required if you specify identityId.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - resourceId: The ID of the resource. This parameter is required if you specify resourceType.
    ///   - resourceType: The type of resource (portal or project). This parameter is required if you specify resourceId.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccessPolicies(
        iamArn: String? = nil,
        identityId: String? = nil,
        identityType: IdentityType? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceId: String? = nil,
        resourceType: ResourceType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccessPoliciesResponse {
        let input = ListAccessPoliciesRequest(
            iamArn: iamArn, 
            identityId: identityId, 
            identityType: identityType, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceId: resourceId, 
            resourceType: resourceType
        )
        return try await self.listAccessPolicies(input, logger: logger)
    }

    /// Retrieves a paginated list of actions for a specific target resource.
    @Sendable
    @inlinable
    public func listActions(_ input: ListActionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListActionsResponse {
        try await self.client.execute(
            operation: "ListActions", 
            path: "/actions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of actions for a specific target resource.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - resolveToResourceId: The ID of the resolved resource.
    ///   - resolveToResourceType: The type of the resolved resource.
    ///   - targetResourceId: The ID of the target resource.
    ///   - targetResourceType: The type of resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listActions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resolveToResourceId: String? = nil,
        resolveToResourceType: ResolveToResourceType? = nil,
        targetResourceId: String,
        targetResourceType: TargetResourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListActionsResponse {
        let input = ListActionsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resolveToResourceId: resolveToResourceId, 
            resolveToResourceType: resolveToResourceType, 
            targetResourceId: targetResourceId, 
            targetResourceType: targetResourceType
        )
        return try await self.listActions(input, logger: logger)
    }

    /// Retrieves a paginated list of composite models associated with the asset model
    @Sendable
    @inlinable
    public func listAssetModelCompositeModels(_ input: ListAssetModelCompositeModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetModelCompositeModelsResponse {
        try await self.client.execute(
            operation: "ListAssetModelCompositeModels", 
            path: "/asset-models/{assetModelId}/composite-models", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of composite models associated with the asset model
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssetModelCompositeModels(
        assetModelId: String,
        assetModelVersion: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetModelCompositeModelsResponse {
        let input = ListAssetModelCompositeModelsRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssetModelCompositeModels(input, logger: logger)
    }

    /// Retrieves a paginated list of properties associated with an asset model. If you update properties associated with the model before you finish listing all the properties, you need to start all over again.
    @Sendable
    @inlinable
    public func listAssetModelProperties(_ input: ListAssetModelPropertiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetModelPropertiesResponse {
        try await self.client.execute(
            operation: "ListAssetModelProperties", 
            path: "/asset-models/{assetModelId}/properties", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of properties associated with an asset model. If you update properties associated with the model before you finish listing all the properties, you need to start all over again.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - filter:  Filters the requested list of asset model properties. You can choose one of the following options:    ALL – The list includes all asset model properties for a given asset model ID.     BASE – The list includes only base asset model properties for a given asset model ID.    Default: BASE
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 50.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssetModelProperties(
        assetModelId: String,
        assetModelVersion: String? = nil,
        filter: ListAssetModelPropertiesFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetModelPropertiesResponse {
        let input = ListAssetModelPropertiesRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssetModelProperties(input, logger: logger)
    }

    /// Retrieves a paginated list of summaries of all asset models.
    @Sendable
    @inlinable
    public func listAssetModels(_ input: ListAssetModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetModelsResponse {
        try await self.client.execute(
            operation: "ListAssetModels", 
            path: "/asset-models", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of summaries of all asset models.
    ///
    /// Parameters:
    ///   - assetModelTypes: The type of asset model. If you don't provide an assetModelTypes, all types of asset models are returned.    ASSET_MODEL – An asset model that you can use to create assets. Can't be included as a component in another asset model.    COMPONENT_MODEL – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model.     INTERFACE – An interface is a type of model that defines a standard structure that can be applied to different asset models.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssetModels(
        assetModelTypes: [AssetModelType]? = nil,
        assetModelVersion: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetModelsResponse {
        let input = ListAssetModelsRequest(
            assetModelTypes: assetModelTypes, 
            assetModelVersion: assetModelVersion, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssetModels(input, logger: logger)
    }

    /// Retrieves a paginated list of properties associated with an asset. If you update properties associated with the model before you finish listing all the properties, you need to start all over again.
    @Sendable
    @inlinable
    public func listAssetProperties(_ input: ListAssetPropertiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetPropertiesResponse {
        try await self.client.execute(
            operation: "ListAssetProperties", 
            path: "/assets/{assetId}/properties", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of properties associated with an asset. If you update properties associated with the model before you finish listing all the properties, you need to start all over again.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - filter:  Filters the requested list of asset properties. You can choose one of the following options:    ALL – The list includes all asset properties for a given asset model ID.     BASE – The list includes only base asset properties for a given asset model ID.    Default: BASE
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 50.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssetProperties(
        assetId: String,
        filter: ListAssetPropertiesFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetPropertiesResponse {
        let input = ListAssetPropertiesRequest(
            assetId: assetId, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssetProperties(input, logger: logger)
    }

    /// Retrieves a paginated list of asset relationships for an asset. You can use this operation to identify an asset's root asset and all associated assets between that asset and its root.
    @Sendable
    @inlinable
    public func listAssetRelationships(_ input: ListAssetRelationshipsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetRelationshipsResponse {
        try await self.client.execute(
            operation: "ListAssetRelationships", 
            path: "/assets/{assetId}/assetRelationships", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of asset relationships for an asset. You can use this operation to identify an asset's root asset and all associated assets between that asset and its root.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - traversalType: The type of traversal to use to identify asset relationships. Choose the following option:    PATH_TO_ROOT – Identify the asset's parent assets up to the root asset. The asset that you specify in assetId is the first result in the list of assetRelationshipSummaries, and the root asset is the last result.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssetRelationships(
        assetId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        traversalType: TraversalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetRelationshipsResponse {
        let input = ListAssetRelationshipsRequest(
            assetId: assetId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            traversalType: traversalType
        )
        return try await self.listAssetRelationships(input, logger: logger)
    }

    /// Retrieves a paginated list of asset summaries. You can use this operation to do the following:   List assets based on a specific asset model.   List top-level assets.   You can't use this operation to list all assets. To retrieve summaries for all of your assets, use ListAssetModels to get all of your asset model IDs. Then, use ListAssets to get all assets for each asset model.
    @Sendable
    @inlinable
    public func listAssets(_ input: ListAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssetsResponse {
        try await self.client.execute(
            operation: "ListAssets", 
            path: "/assets", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of asset summaries. You can use this operation to do the following:   List assets based on a specific asset model.   List top-level assets.   You can't use this operation to list all assets. To retrieve summaries for all of your assets, use ListAssetModels to get all of your asset model IDs. Then, use ListAssets to get all assets for each asset model.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model by which to filter the list of assets. This parameter is required if you choose ALL for filter. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - filter: The filter for the requested list of assets. Choose one of the following options:    ALL – The list includes all assets for a given asset model ID. The assetModelId parameter is required if you filter by ALL.    TOP_LEVEL – The list includes only top-level assets in the asset hierarchy tree.   Default: ALL
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssets(
        assetModelId: String? = nil,
        filter: ListAssetsFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssetsResponse {
        let input = ListAssetsRequest(
            assetModelId: assetModelId, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssets(input, logger: logger)
    }

    /// Retrieves a paginated list of associated assets. You can use this operation to do the following:    CHILD - List all child assets associated to the asset.    PARENT - List the asset's parent asset.
    @Sendable
    @inlinable
    public func listAssociatedAssets(_ input: ListAssociatedAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssociatedAssetsResponse {
        try await self.client.execute(
            operation: "ListAssociatedAssets", 
            path: "/assets/{assetId}/hierarchies", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of associated assets. You can use this operation to do the following:    CHILD - List all child assets associated to the asset.    PARENT - List the asset's parent asset.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset to query. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - hierarchyId: (Optional) If you don't provide a hierarchyId, all the immediate assets in the traversalDirection will be returned.  The ID of the hierarchy by which child assets are associated to the asset. (This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.) For more information, see Asset hierarchies in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - traversalDirection: The direction to list associated assets. Choose one of the following options:    CHILD – The list includes all child assets associated to the asset.    PARENT – The list includes the asset's parent asset.   Default: CHILD
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssociatedAssets(
        assetId: String,
        hierarchyId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        traversalDirection: TraversalDirection? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssociatedAssetsResponse {
        let input = ListAssociatedAssetsRequest(
            assetId: assetId, 
            hierarchyId: hierarchyId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            traversalDirection: traversalDirection
        )
        return try await self.listAssociatedAssets(input, logger: logger)
    }

    /// Retrieves a paginated list of bulk import job requests. For more information, see List bulk import jobs (CLI) in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func listBulkImportJobs(_ input: ListBulkImportJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBulkImportJobsResponse {
        try await self.client.execute(
            operation: "ListBulkImportJobs", 
            path: "/jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "data.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of bulk import job requests. For more information, see List bulk import jobs (CLI) in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - filter: You can use a filter to select the bulk import jobs that you want to retrieve.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBulkImportJobs(
        filter: ListBulkImportJobsFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBulkImportJobsResponse {
        let input = ListBulkImportJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBulkImportJobs(input, logger: logger)
    }

    /// Retrieves a paginated list of composition relationships for an asset model of type COMPONENT_MODEL.
    @Sendable
    @inlinable
    public func listCompositionRelationships(_ input: ListCompositionRelationshipsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCompositionRelationshipsResponse {
        try await self.client.execute(
            operation: "ListCompositionRelationships", 
            path: "/asset-models/{assetModelId}/composition-relationships", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of composition relationships for an asset model of type COMPONENT_MODEL.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCompositionRelationships(
        assetModelId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCompositionRelationshipsResponse {
        let input = ListCompositionRelationshipsRequest(
            assetModelId: assetModelId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCompositionRelationships(input, logger: logger)
    }

    ///  Lists all data binding usages for computation models. This allows to identify where specific data bindings are being utilized across the computation models. This track dependencies between data sources and computation models.
    @Sendable
    @inlinable
    public func listComputationModelDataBindingUsages(_ input: ListComputationModelDataBindingUsagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComputationModelDataBindingUsagesResponse {
        try await self.client.execute(
            operation: "ListComputationModelDataBindingUsages", 
            path: "/computation-models/data-binding-usages", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    ///  Lists all data binding usages for computation models. This allows to identify where specific data bindings are being utilized across the computation models. This track dependencies between data sources and computation models.
    ///
    /// Parameters:
    ///   - dataBindingValueFilter: A filter used to limit the returned data binding usages based on specific data binding values. You can filter by asset, asset model, asset property, or asset model property to find all computation models using these specific data sources.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - nextToken: The token used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComputationModelDataBindingUsages(
        dataBindingValueFilter: DataBindingValueFilter,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComputationModelDataBindingUsagesResponse {
        let input = ListComputationModelDataBindingUsagesRequest(
            dataBindingValueFilter: dataBindingValueFilter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listComputationModelDataBindingUsages(input, logger: logger)
    }

    /// Lists all distinct resources that are resolved from the executed actions of the computation model.
    @Sendable
    @inlinable
    public func listComputationModelResolveToResources(_ input: ListComputationModelResolveToResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComputationModelResolveToResourcesResponse {
        try await self.client.execute(
            operation: "ListComputationModelResolveToResources", 
            path: "/computation-models/{computationModelId}/resolve-to-resources", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Lists all distinct resources that are resolved from the executed actions of the computation model.
    ///
    /// Parameters:
    ///   - computationModelId: The ID of the computation model for which to list resolved resources.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - nextToken: The token used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComputationModelResolveToResources(
        computationModelId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComputationModelResolveToResourcesResponse {
        let input = ListComputationModelResolveToResourcesRequest(
            computationModelId: computationModelId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listComputationModelResolveToResources(input, logger: logger)
    }

    /// Retrieves a paginated list of summaries of all computation models.
    @Sendable
    @inlinable
    public func listComputationModels(_ input: ListComputationModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComputationModelsResponse {
        try await self.client.execute(
            operation: "ListComputationModels", 
            path: "/computation-models", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of summaries of all computation models.
    ///
    /// Parameters:
    ///   - computationModelType: The type of computation model. If a computationModelType is not provided, all types of computation models are returned.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComputationModels(
        computationModelType: ComputationModelType? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComputationModelsResponse {
        let input = ListComputationModelsRequest(
            computationModelType: computationModelType, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listComputationModels(input, logger: logger)
    }

    /// Retrieves a paginated list of dashboards for an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func listDashboards(_ input: ListDashboardsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDashboardsResponse {
        try await self.client.execute(
            operation: "ListDashboards", 
            path: "/dashboards", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of dashboards for an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - projectId: The ID of the project.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDashboards(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDashboardsResponse {
        let input = ListDashboardsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectId: projectId
        )
        return try await self.listDashboards(input, logger: logger)
    }

    /// Retrieves a paginated list of datasets for a specific target resource.
    @Sendable
    @inlinable
    public func listDatasets(_ input: ListDatasetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetsResponse {
        try await self.client.execute(
            operation: "ListDatasets", 
            path: "/datasets", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of datasets for a specific target resource.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token for the next set of results, or null if there are no additional results.
    ///   - sourceType: The type of data source for the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasets(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sourceType: DatasetSourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetsResponse {
        let input = ListDatasetsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            sourceType: sourceType
        )
        return try await self.listDatasets(input, logger: logger)
    }

    /// Retrieves a paginated list of summaries of all executions.
    @Sendable
    @inlinable
    public func listExecutions(_ input: ListExecutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListExecutionsResponse {
        try await self.client.execute(
            operation: "ListExecutions", 
            path: "/executions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of summaries of all executions.
    ///
    /// Parameters:
    ///   - actionType: The type of action exectued.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - nextToken: The token used for the next set of paginated results.
    ///   - resolveToResourceId: The ID of the resolved resource.
    ///   - resolveToResourceType: The type of the resolved resource.
    ///   - targetResourceId: The ID of the target resource.
    ///   - targetResourceType: The type of the target resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listExecutions(
        actionType: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resolveToResourceId: String? = nil,
        resolveToResourceType: ResolveToResourceType? = nil,
        targetResourceId: String,
        targetResourceType: TargetResourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListExecutionsResponse {
        let input = ListExecutionsRequest(
            actionType: actionType, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resolveToResourceId: resolveToResourceId, 
            resolveToResourceType: resolveToResourceType, 
            targetResourceId: targetResourceId, 
            targetResourceType: targetResourceType
        )
        return try await self.listExecutions(input, logger: logger)
    }

    /// Retrieves a paginated list of gateways.
    @Sendable
    @inlinable
    public func listGateways(_ input: ListGatewaysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListGatewaysResponse {
        try await self.client.execute(
            operation: "ListGateways", 
            path: "/20200301/gateways", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of gateways.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listGateways(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListGatewaysResponse {
        let input = ListGatewaysRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listGateways(input, logger: logger)
    }

    /// Retrieves a paginated list of asset models that have a specific interface asset model applied to them.
    @Sendable
    @inlinable
    public func listInterfaceRelationships(_ input: ListInterfaceRelationshipsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInterfaceRelationshipsResponse {
        try await self.client.execute(
            operation: "ListInterfaceRelationships", 
            path: "/interface/{interfaceAssetModelId}/asset-models", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of asset models that have a specific interface asset model applied to them.
    ///
    /// Parameters:
    ///   - interfaceAssetModelId: The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInterfaceRelationships(
        interfaceAssetModelId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInterfaceRelationshipsResponse {
        let input = ListInterfaceRelationshipsRequest(
            interfaceAssetModelId: interfaceAssetModelId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listInterfaceRelationships(input, logger: logger)
    }

    /// Retrieves a paginated list of IoT SiteWise Monitor portals.
    @Sendable
    @inlinable
    public func listPortals(_ input: ListPortalsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPortalsResponse {
        try await self.client.execute(
            operation: "ListPortals", 
            path: "/portals", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of IoT SiteWise Monitor portals.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPortals(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPortalsResponse {
        let input = ListPortalsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPortals(input, logger: logger)
    }

    /// Retrieves a paginated list of assets associated with an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func listProjectAssets(_ input: ListProjectAssetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListProjectAssetsResponse {
        try await self.client.execute(
            operation: "ListProjectAssets", 
            path: "/projects/{projectId}/assets", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of assets associated with an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - projectId: The ID of the project.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProjectAssets(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListProjectAssetsResponse {
        let input = ListProjectAssetsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectId: projectId
        )
        return try await self.listProjectAssets(input, logger: logger)
    }

    /// Retrieves a paginated list of projects for an IoT SiteWise Monitor portal.
    @Sendable
    @inlinable
    public func listProjects(_ input: ListProjectsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListProjectsResponse {
        try await self.client.execute(
            operation: "ListProjects", 
            path: "/projects", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of projects for an IoT SiteWise Monitor portal.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - portalId: The ID of the portal.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProjects(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListProjectsResponse {
        let input = ListProjectsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            portalId: portalId
        )
        return try await self.listProjects(input, logger: logger)
    }

    /// Retrieves the list of tags for an IoT SiteWise resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves the list of tags for an IoT SiteWise resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Retrieves a paginated list of time series (data streams).
    @Sendable
    @inlinable
    public func listTimeSeries(_ input: ListTimeSeriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTimeSeriesResponse {
        try await self.client.execute(
            operation: "ListTimeSeries", 
            path: "/timeseries", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Retrieves a paginated list of time series (data streams).
    ///
    /// Parameters:
    ///   - aliasPrefix: The alias prefix of the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - nextToken: The token to be used for the next set of paginated results.
    ///   - timeSeriesType: The type of the time series. The time series type can be one of the following values:    ASSOCIATED – The time series is associated with an asset property.    DISASSOCIATED – The time series isn't associated with any asset property.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTimeSeries(
        aliasPrefix: String? = nil,
        assetId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        timeSeriesType: ListTimeSeriesType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTimeSeriesResponse {
        let input = ListTimeSeriesRequest(
            aliasPrefix: aliasPrefix, 
            assetId: assetId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            timeSeriesType: timeSeriesType
        )
        return try await self.listTimeSeries(input, logger: logger)
    }

    /// Creates or updates an interface relationship between an asset model and an interface asset model. This operation applies an interface to an asset model.
    @Sendable
    @inlinable
    public func putAssetModelInterfaceRelationship(_ input: PutAssetModelInterfaceRelationshipRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAssetModelInterfaceRelationshipResponse {
        try await self.client.execute(
            operation: "PutAssetModelInterfaceRelationship", 
            path: "/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Creates or updates an interface relationship between an asset model and an interface asset model. This operation applies an interface to an asset model.
    ///
    /// Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - interfaceAssetModelId: The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - propertyMappingConfiguration: The configuration for mapping properties from the interface asset model to the asset model where the interface is applied. This configuration controls how properties are matched and created during the interface application process.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAssetModelInterfaceRelationship(
        assetModelId: String,
        clientToken: String? = PutAssetModelInterfaceRelationshipRequest.idempotencyToken(),
        interfaceAssetModelId: String,
        propertyMappingConfiguration: PropertyMappingConfiguration,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAssetModelInterfaceRelationshipResponse {
        let input = PutAssetModelInterfaceRelationshipRequest(
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            interfaceAssetModelId: interfaceAssetModelId, 
            propertyMappingConfiguration: propertyMappingConfiguration
        )
        return try await self.putAssetModelInterfaceRelationship(input, logger: logger)
    }

    /// Sets the default encryption configuration for the Amazon Web Services account. For more information, see Key management in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func putDefaultEncryptionConfiguration(_ input: PutDefaultEncryptionConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutDefaultEncryptionConfigurationResponse {
        try await self.client.execute(
            operation: "PutDefaultEncryptionConfiguration", 
            path: "/configuration/account/encryption", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Sets the default encryption configuration for the Amazon Web Services account. For more information, see Key management in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - encryptionType: The type of encryption used for the encryption configuration.
    ///   - kmsKeyId: The Key ID of the customer managed key used for KMS encryption. This is required if you use KMS_BASED_ENCRYPTION.
    ///   - logger: Logger use during operation
    @inlinable
    public func putDefaultEncryptionConfiguration(
        encryptionType: EncryptionType,
        kmsKeyId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutDefaultEncryptionConfigurationResponse {
        let input = PutDefaultEncryptionConfigurationRequest(
            encryptionType: encryptionType, 
            kmsKeyId: kmsKeyId
        )
        return try await self.putDefaultEncryptionConfiguration(input, logger: logger)
    }

    /// Sets logging options for IoT SiteWise.
    @Sendable
    @inlinable
    public func putLoggingOptions(_ input: PutLoggingOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutLoggingOptionsResponse {
        try await self.client.execute(
            operation: "PutLoggingOptions", 
            path: "/logging", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Sets logging options for IoT SiteWise.
    ///
    /// Parameters:
    ///   - loggingOptions: The logging options to set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putLoggingOptions(
        loggingOptions: LoggingOptions,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutLoggingOptionsResponse {
        let input = PutLoggingOptionsRequest(
            loggingOptions: loggingOptions
        )
        return try await self.putLoggingOptions(input, logger: logger)
    }

    /// Configures storage settings for IoT SiteWise.
    @Sendable
    @inlinable
    public func putStorageConfiguration(_ input: PutStorageConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutStorageConfigurationResponse {
        try await self.client.execute(
            operation: "PutStorageConfiguration", 
            path: "/configuration/account/storage", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Configures storage settings for IoT SiteWise.
    ///
    /// Parameters:
    ///   - disallowIngestNullNaN: Describes the configuration for ingesting NULL and NaN data. By default the feature is allowed. The feature is disallowed if the value is true.
    ///   - disassociatedDataStorage: Contains the storage configuration for time series (data streams) that aren't associated with asset properties. The disassociatedDataStorage can be one of the following values:    ENABLED – IoT SiteWise accepts time series that aren't associated with asset properties.  After the disassociatedDataStorage is enabled, you can't disable it.     DISABLED – IoT SiteWise doesn't accept time series (data streams) that aren't associated with asset properties.   For more information, see Data streams in the IoT SiteWise User Guide.
    ///   - multiLayerStorage: Identifies a storage destination. If you specified MULTI_LAYER_STORAGE for the storage type, you must specify a MultiLayerStorage object.
    ///   - retentionPeriod: 
    ///   - storageType: The storage tier that you specified for your data. The storageType parameter can be one of the following values:    SITEWISE_DEFAULT_STORAGE – IoT SiteWise saves your data into the hot tier. The hot tier is a service-managed database.    MULTI_LAYER_STORAGE – IoT SiteWise saves your data in both the cold tier and the hot tier. The cold tier is a customer-managed Amazon S3 bucket.
    ///   - warmTier: A service managed storage tier optimized for analytical queries. It stores periodically uploaded, buffered and historical data ingested with the CreaeBulkImportJob API.
    ///   - warmTierRetentionPeriod: Set this period to specify how long your data is stored in the warm tier before it is deleted. You can set this only if cold tier is enabled.
    ///   - logger: Logger use during operation
    @inlinable
    public func putStorageConfiguration(
        disallowIngestNullNaN: Bool? = nil,
        disassociatedDataStorage: DisassociatedDataStorageState? = nil,
        multiLayerStorage: MultiLayerStorage? = nil,
        retentionPeriod: RetentionPeriod? = nil,
        storageType: StorageType,
        warmTier: WarmTierState? = nil,
        warmTierRetentionPeriod: WarmTierRetentionPeriod? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutStorageConfigurationResponse {
        let input = PutStorageConfigurationRequest(
            disallowIngestNullNaN: disallowIngestNullNaN, 
            disassociatedDataStorage: disassociatedDataStorage, 
            multiLayerStorage: multiLayerStorage, 
            retentionPeriod: retentionPeriod, 
            storageType: storageType, 
            warmTier: warmTier, 
            warmTierRetentionPeriod: warmTierRetentionPeriod
        )
        return try await self.putStorageConfiguration(input, logger: logger)
    }

    /// Adds tags to an IoT SiteWise resource. If a tag already exists for the resource, this operation updates the tag's value.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Adds tags to an IoT SiteWise resource. If a tag already exists for the resource, this operation updates the tag's value.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource to tag.
    ///   - tags: A list of key-value pairs that contain metadata for the resource. For more information, see Tagging your IoT SiteWise resources in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes a tag from an IoT SiteWise resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Removes a tag from an IoT SiteWise resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource to untag.
    ///   - tagKeys: A list of keys for tags to remove from the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates an existing access policy that specifies an identity's access to an IoT SiteWise Monitor portal or project resource.
    @Sendable
    @inlinable
    public func updateAccessPolicy(_ input: UpdateAccessPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAccessPolicyResponse {
        try await self.client.execute(
            operation: "UpdateAccessPolicy", 
            path: "/access-policies/{accessPolicyId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Updates an existing access policy that specifies an identity's access to an IoT SiteWise Monitor portal or project resource.
    ///
    /// Parameters:
    ///   - accessPolicyId: The ID of the access policy.
    ///   - accessPolicyIdentity: The identity for this access policy. Choose an IAM Identity Center user, an IAM Identity Center group, or an IAM user.
    ///   - accessPolicyPermission: The permission level for this access policy. Note that a project ADMINISTRATOR is also known as a project owner.
    ///   - accessPolicyResource: The IoT SiteWise Monitor resource for this access policy. Choose either a portal or a project.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAccessPolicy(
        accessPolicyId: String,
        accessPolicyIdentity: Identity,
        accessPolicyPermission: Permission,
        accessPolicyResource: Resource,
        clientToken: String? = UpdateAccessPolicyRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAccessPolicyResponse {
        let input = UpdateAccessPolicyRequest(
            accessPolicyId: accessPolicyId, 
            accessPolicyIdentity: accessPolicyIdentity, 
            accessPolicyPermission: accessPolicyPermission, 
            accessPolicyResource: accessPolicyResource, 
            clientToken: clientToken
        )
        return try await self.updateAccessPolicy(input, logger: logger)
    }

    /// Updates an asset's name. For more information, see Updating assets and models in the IoT SiteWise User Guide.
    @Sendable
    @inlinable
    public func updateAsset(_ input: UpdateAssetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAssetResponse {
        try await self.client.execute(
            operation: "UpdateAsset", 
            path: "/assets/{assetId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates an asset's name. For more information, see Updating assets and models in the IoT SiteWise User Guide.
    ///
    /// Parameters:
    ///   - assetDescription: A description for the asset.
    ///   - assetExternalId: An external ID to assign to the asset. The asset must not already have an external ID. The external ID must be unique within your Amazon Web Services account. For more information, see Using external IDs in the IoT SiteWise User Guide.
    ///   - assetId: The ID of the asset to update. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetName: A friendly name for the asset.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAsset(
        assetDescription: String? = nil,
        assetExternalId: String? = nil,
        assetId: String,
        assetName: String,
        clientToken: String? = UpdateAssetRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAssetResponse {
        let input = UpdateAssetRequest(
            assetDescription: assetDescription, 
            assetExternalId: assetExternalId, 
            assetId: assetId, 
            assetName: assetName, 
            clientToken: clientToken
        )
        return try await self.updateAsset(input, logger: logger)
    }

    /// Updates an asset model and all of the assets that were created from the model. Each asset created from the model inherits the updated asset model's property and hierarchy definitions. For more information, see Updating assets and models in the IoT SiteWise User Guide.  If you remove a property from an asset model, IoT SiteWise deletes all previous data for that property. You can’t change the type or data type of an existing property. To replace an existing asset model property with a new one with the same name, do the following:   Submit an UpdateAssetModel request with the entire existing property removed.   Submit a second UpdateAssetModel request that includes the new property. The new asset property will have the same name as the previous one and IoT SiteWise will generate a new unique id.
    @Sendable
    @inlinable
    public func updateAssetModel(_ input: UpdateAssetModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAssetModelResponse {
        try await self.client.execute(
            operation: "UpdateAssetModel", 
            path: "/asset-models/{assetModelId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates an asset model and all of the assets that were created from the model. Each asset created from the model inherits the updated asset model's property and hierarchy definitions. For more information, see Updating assets and models in the IoT SiteWise User Guide.  If you remove a property from an asset model, IoT SiteWise deletes all previous data for that property. You can’t change the type or data type of an existing property. To replace an existing asset model property with a new one with the same name, do the following:   Submit an UpdateAssetModel request with the entire existing property removed.   Submit a second UpdateAssetModel request that includes the new property. The new asset property will have the same name as the previous one and IoT SiteWise will generate a new unique id.
    ///
    /// Parameters:
    ///   - assetModelCompositeModels: The composite models that are part of this asset model. It groups properties (such as attributes, measurements, transforms, and metrics) and child composite models that model parts of your industrial equipment. Each composite model has a type that defines the properties that the composite model supports. Use composite models to define alarms on this asset model.  When creating custom composite models, you need to use CreateAssetModelCompositeModel. For more information, see Creating custom composite models (Components) in the IoT SiteWise User Guide.
    ///   - assetModelDescription: A description for the asset model.
    ///   - assetModelExternalId: An external ID to assign to the asset model. The asset model must not already have an external ID. The external ID must be unique within your Amazon Web Services account. For more information, see Using external IDs in the IoT SiteWise User Guide.
    ///   - assetModelHierarchies: The updated hierarchy definitions of the asset model. Each hierarchy specifies an asset model whose assets can be children of any other assets created from this asset model. For more information, see Asset hierarchies in the IoT SiteWise User Guide. You can specify up to 10 hierarchies per asset model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - assetModelId: The ID of the asset model to update. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelName: A unique name for the asset model.
    ///   - assetModelProperties: The updated property definitions of the asset model. For more information, see Asset properties in the IoT SiteWise User Guide. You can specify up to 200 properties per asset model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - ifMatch: The expected current entity tag (ETag) for the asset model’s latest or active version (specified using matchForVersionType).    The update request is rejected if the tag does not match the latest or active version's current entity tag. See Optimistic locking for asset model writes in the IoT SiteWise User Guide.
    ///   - ifNoneMatch: Accepts * to reject the update request if an active version  (specified using matchForVersionType as ACTIVE) already exists for the asset model.
    ///   - matchForVersionType: Specifies the asset model version type (LATEST or ACTIVE) used in  conjunction with If-Match or If-None-Match headers to determine the target ETag for the update operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssetModel(
        assetModelCompositeModels: [AssetModelCompositeModel]? = nil,
        assetModelDescription: String? = nil,
        assetModelExternalId: String? = nil,
        assetModelHierarchies: [AssetModelHierarchy]? = nil,
        assetModelId: String,
        assetModelName: String,
        assetModelProperties: [AssetModelProperty]? = nil,
        clientToken: String? = UpdateAssetModelRequest.idempotencyToken(),
        ifMatch: String? = nil,
        ifNoneMatch: String? = nil,
        matchForVersionType: AssetModelVersionType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAssetModelResponse {
        let input = UpdateAssetModelRequest(
            assetModelCompositeModels: assetModelCompositeModels, 
            assetModelDescription: assetModelDescription, 
            assetModelExternalId: assetModelExternalId, 
            assetModelHierarchies: assetModelHierarchies, 
            assetModelId: assetModelId, 
            assetModelName: assetModelName, 
            assetModelProperties: assetModelProperties, 
            clientToken: clientToken, 
            ifMatch: ifMatch, 
            ifNoneMatch: ifNoneMatch, 
            matchForVersionType: matchForVersionType
        )
        return try await self.updateAssetModel(input, logger: logger)
    }

    /// Updates a composite model and all of the assets that were created from the model. Each asset created from the model inherits the updated asset model's property and hierarchy definitions. For more information, see Updating assets and models in the IoT SiteWise User Guide.  If you remove a property from a composite asset model, IoT SiteWise deletes all previous data for that property. You can’t change the type or data type of an existing property. To replace an existing composite asset model property with a new one with the same name, do the following:   Submit an UpdateAssetModelCompositeModel request with the entire existing property removed.   Submit a second UpdateAssetModelCompositeModel request that includes the new property. The new asset property will have the same name as the previous one and IoT SiteWise will generate a new unique id.
    @Sendable
    @inlinable
    public func updateAssetModelCompositeModel(_ input: UpdateAssetModelCompositeModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAssetModelCompositeModelResponse {
        try await self.client.execute(
            operation: "UpdateAssetModelCompositeModel", 
            path: "/asset-models/{assetModelId}/composite-models/{assetModelCompositeModelId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a composite model and all of the assets that were created from the model. Each asset created from the model inherits the updated asset model's property and hierarchy definitions. For more information, see Updating assets and models in the IoT SiteWise User Guide.  If you remove a property from a composite asset model, IoT SiteWise deletes all previous data for that property. You can’t change the type or data type of an existing property. To replace an existing composite asset model property with a new one with the same name, do the following:   Submit an UpdateAssetModelCompositeModel request with the entire existing property removed.   Submit a second UpdateAssetModelCompositeModel request that includes the new property. The new asset property will have the same name as the previous one and IoT SiteWise will generate a new unique id.
    ///
    /// Parameters:
    ///   - assetModelCompositeModelDescription: A description for the composite model.
    ///   - assetModelCompositeModelExternalId: An external ID to assign to the asset model. You can only set the external ID of the asset model if it wasn't set when it was created, or you're setting it to the exact same thing as when it was created.
    ///   - assetModelCompositeModelId: The ID of a composite model on this asset model.
    ///   - assetModelCompositeModelName: A unique name for the composite model.
    ///   - assetModelCompositeModelProperties: The property definitions of the composite model. For more information, see  Inline custom composite models in the IoT SiteWise User Guide. You can specify up to 200 properties per composite model. For more information, see Quotas in the IoT SiteWise User Guide.
    ///   - assetModelId: The ID of the asset model, in UUID format.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - ifMatch: The expected current entity tag (ETag) for the asset model’s latest or active version (specified using matchForVersionType).    The update request is rejected if the tag does not match the latest or active version's current entity tag. See Optimistic locking for asset model writes in the IoT SiteWise User Guide.
    ///   - ifNoneMatch: Accepts * to reject the update request if an active version  (specified using matchForVersionType as ACTIVE) already exists for the asset model.
    ///   - matchForVersionType: Specifies the asset model version type (LATEST or ACTIVE) used in  conjunction with If-Match or If-None-Match headers to determine the target ETag for the update operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssetModelCompositeModel(
        assetModelCompositeModelDescription: String? = nil,
        assetModelCompositeModelExternalId: String? = nil,
        assetModelCompositeModelId: String,
        assetModelCompositeModelName: String,
        assetModelCompositeModelProperties: [AssetModelProperty]? = nil,
        assetModelId: String,
        clientToken: String? = UpdateAssetModelCompositeModelRequest.idempotencyToken(),
        ifMatch: String? = nil,
        ifNoneMatch: String? = nil,
        matchForVersionType: AssetModelVersionType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAssetModelCompositeModelResponse {
        let input = UpdateAssetModelCompositeModelRequest(
            assetModelCompositeModelDescription: assetModelCompositeModelDescription, 
            assetModelCompositeModelExternalId: assetModelCompositeModelExternalId, 
            assetModelCompositeModelId: assetModelCompositeModelId, 
            assetModelCompositeModelName: assetModelCompositeModelName, 
            assetModelCompositeModelProperties: assetModelCompositeModelProperties, 
            assetModelId: assetModelId, 
            clientToken: clientToken, 
            ifMatch: ifMatch, 
            ifNoneMatch: ifNoneMatch, 
            matchForVersionType: matchForVersionType
        )
        return try await self.updateAssetModelCompositeModel(input, logger: logger)
    }

    /// Updates an asset property's alias and notification state.  This operation overwrites the property's existing alias and notification state. To keep your existing property's alias or notification state, you must include the existing values in the UpdateAssetProperty request. For more information, see DescribeAssetProperty.
    @Sendable
    @inlinable
    public func updateAssetProperty(_ input: UpdateAssetPropertyRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateAssetProperty", 
            path: "/assets/{assetId}/properties/{propertyId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates an asset property's alias and notification state.  This operation overwrites the property's existing alias and notification state. To keep your existing property's alias or notification state, you must include the existing values in the UpdateAssetProperty request. For more information, see DescribeAssetProperty.
    ///
    /// Parameters:
    ///   - assetId: The ID of the asset to be updated. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide. If you omit this parameter, the alias is removed from the property.
    ///   - propertyId: The ID of the asset property to be updated. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - propertyNotificationState: The MQTT notification state (enabled or disabled) for this asset property. When the notification state is enabled, IoT SiteWise publishes property value updates to a unique MQTT topic. For more information, see Interacting with other services in the IoT SiteWise User Guide. If you omit this parameter, the notification state is set to DISABLED.
    ///   - propertyUnit: The unit of measure (such as Newtons or RPM) of the asset property. If you don't specify a value for this parameter, the service uses the value of the assetModelProperty in the asset model.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssetProperty(
        assetId: String,
        clientToken: String? = UpdateAssetPropertyRequest.idempotencyToken(),
        propertyAlias: String? = nil,
        propertyId: String,
        propertyNotificationState: PropertyNotificationState? = nil,
        propertyUnit: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateAssetPropertyRequest(
            assetId: assetId, 
            clientToken: clientToken, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            propertyNotificationState: propertyNotificationState, 
            propertyUnit: propertyUnit
        )
        return try await self.updateAssetProperty(input, logger: logger)
    }

    /// Updates the computation model.
    @Sendable
    @inlinable
    public func updateComputationModel(_ input: UpdateComputationModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateComputationModelResponse {
        try await self.client.execute(
            operation: "UpdateComputationModel", 
            path: "/computation-models/{computationModelId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates the computation model.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - computationModelConfiguration: The configuration for the computation model.
    ///   - computationModelDataBinding: The data binding for the computation model. Key is a variable name defined in configuration.  Value is a ComputationModelDataBindingValue referenced by the variable.
    ///   - computationModelDescription: The description of the computation model.
    ///   - computationModelId: The ID of the computation model.
    ///   - computationModelName: The name of the computation model.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateComputationModel(
        clientToken: String? = UpdateComputationModelRequest.idempotencyToken(),
        computationModelConfiguration: ComputationModelConfiguration,
        computationModelDataBinding: [String: ComputationModelDataBindingValue],
        computationModelDescription: String? = nil,
        computationModelId: String,
        computationModelName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateComputationModelResponse {
        let input = UpdateComputationModelRequest(
            clientToken: clientToken, 
            computationModelConfiguration: computationModelConfiguration, 
            computationModelDataBinding: computationModelDataBinding, 
            computationModelDescription: computationModelDescription, 
            computationModelId: computationModelId, 
            computationModelName: computationModelName
        )
        return try await self.updateComputationModel(input, logger: logger)
    }

    /// Updates an IoT SiteWise Monitor dashboard.
    @Sendable
    @inlinable
    public func updateDashboard(_ input: UpdateDashboardRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDashboardResponse {
        try await self.client.execute(
            operation: "UpdateDashboard", 
            path: "/dashboards/{dashboardId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Updates an IoT SiteWise Monitor dashboard.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - dashboardDefinition: The new dashboard definition, as specified in a JSON literal.   IoT SiteWise Monitor (Classic) see Create dashboards (CLI)    IoT SiteWise Monitor (AI-aware) see Create dashboards (CLI)    in the IoT SiteWise User Guide
    ///   - dashboardDescription: A new description for the dashboard.
    ///   - dashboardId: The ID of the dashboard to update.
    ///   - dashboardName: A new friendly name for the dashboard.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDashboard(
        clientToken: String? = UpdateDashboardRequest.idempotencyToken(),
        dashboardDefinition: String,
        dashboardDescription: String? = nil,
        dashboardId: String,
        dashboardName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDashboardResponse {
        let input = UpdateDashboardRequest(
            clientToken: clientToken, 
            dashboardDefinition: dashboardDefinition, 
            dashboardDescription: dashboardDescription, 
            dashboardId: dashboardId, 
            dashboardName: dashboardName
        )
        return try await self.updateDashboard(input, logger: logger)
    }

    /// Updates a dataset.
    @Sendable
    @inlinable
    public func updateDataset(_ input: UpdateDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDatasetResponse {
        try await self.client.execute(
            operation: "UpdateDataset", 
            path: "/datasets/{datasetId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a dataset.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - datasetDescription: A description about the dataset, and its functionality.
    ///   - datasetId: The ID of the dataset.
    ///   - datasetName: The name of the dataset.
    ///   - datasetSource: The data source for the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDataset(
        clientToken: String? = UpdateDatasetRequest.idempotencyToken(),
        datasetDescription: String? = nil,
        datasetId: String,
        datasetName: String,
        datasetSource: DatasetSource,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDatasetResponse {
        let input = UpdateDatasetRequest(
            clientToken: clientToken, 
            datasetDescription: datasetDescription, 
            datasetId: datasetId, 
            datasetName: datasetName, 
            datasetSource: datasetSource
        )
        return try await self.updateDataset(input, logger: logger)
    }

    /// Updates a gateway's name.
    @Sendable
    @inlinable
    public func updateGateway(_ input: UpdateGatewayRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateGateway", 
            path: "/20200301/gateways/{gatewayId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a gateway's name.
    ///
    /// Parameters:
    ///   - gatewayId: The ID of the gateway to update.
    ///   - gatewayName: A unique name for the gateway.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateGateway(
        gatewayId: String,
        gatewayName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateGatewayRequest(
            gatewayId: gatewayId, 
            gatewayName: gatewayName
        )
        return try await self.updateGateway(input, logger: logger)
    }

    /// Updates a gateway capability configuration or defines a new capability configuration. Each gateway capability defines data sources for a gateway. Important workflow notes: Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability. . The namespace follows the format service:capability:version, where:    service - The service providing the capability, or iotsitewise.    capability - The specific capability type. Options include: opcuacollector for the OPC UA data source collector, or publisher for data publisher capability.    version - The version number of the capability. Option include 2 for Classic streams, V2 gateways, and 3 for MQTT-enabled, V3 gateways.   After updating a capability configuration, the sync status becomes OUT_OF_SYNC until the gateway processes the configuration.Use DescribeGatewayCapabilityConfiguration to check the sync status and verify the configuration was applied. A gateway can have multiple capability configurations with different namespaces.
    @Sendable
    @inlinable
    public func updateGatewayCapabilityConfiguration(_ input: UpdateGatewayCapabilityConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateGatewayCapabilityConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateGatewayCapabilityConfiguration", 
            path: "/20200301/gateways/{gatewayId}/capability", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "api.", 
            logger: logger
        )
    }
    /// Updates a gateway capability configuration or defines a new capability configuration. Each gateway capability defines data sources for a gateway. Important workflow notes: Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability. . The namespace follows the format service:capability:version, where:    service - The service providing the capability, or iotsitewise.    capability - The specific capability type. Options include: opcuacollector for the OPC UA data source collector, or publisher for data publisher capability.    version - The version number of the capability. Option include 2 for Classic streams, V2 gateways, and 3 for MQTT-enabled, V3 gateways.   After updating a capability configuration, the sync status becomes OUT_OF_SYNC until the gateway processes the configuration.Use DescribeGatewayCapabilityConfiguration to check the sync status and verify the configuration was applied. A gateway can have multiple capability configurations with different namespaces.
    ///
    /// Parameters:
    ///   - capabilityConfiguration: The JSON document that defines the configuration for the gateway capability. For more information, see Configuring data sources (CLI) in the IoT SiteWise User Guide.
    ///   - capabilityNamespace: The namespace of the gateway capability configuration to be updated. For example, if you configure OPC UA sources for an MQTT-enabled gateway, your OPC-UA capability configuration has the namespace iotsitewise:opcuacollector:3.
    ///   - gatewayId: The ID of the gateway to be updated.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateGatewayCapabilityConfiguration(
        capabilityConfiguration: String,
        capabilityNamespace: String,
        gatewayId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateGatewayCapabilityConfigurationResponse {
        let input = UpdateGatewayCapabilityConfigurationRequest(
            capabilityConfiguration: capabilityConfiguration, 
            capabilityNamespace: capabilityNamespace, 
            gatewayId: gatewayId
        )
        return try await self.updateGatewayCapabilityConfiguration(input, logger: logger)
    }

    /// Updates an IoT SiteWise Monitor portal.
    @Sendable
    @inlinable
    public func updatePortal(_ input: UpdatePortalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePortalResponse {
        try await self.client.execute(
            operation: "UpdatePortal", 
            path: "/portals/{portalId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Updates an IoT SiteWise Monitor portal.
    ///
    /// Parameters:
    ///   - alarms: Contains the configuration information of an alarm created in an IoT SiteWise Monitor portal. You can use the alarm to monitor an asset property and get notified when the asset property value is outside a specified range. For more information, see Monitoring with alarms in the IoT SiteWise Application Guide.
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - notificationSenderEmail: The email address that sends alarm notifications.
    ///   - portalContactEmail: The Amazon Web Services administrator's contact email address.
    ///   - portalDescription: A new description for the portal.
    ///   - portalId: The ID of the portal to update.
    ///   - portalLogoImage: 
    ///   - portalName: A new friendly name for the portal.
    ///   - portalType: Define the type of portal. The value for IoT SiteWise Monitor (Classic) is SITEWISE_PORTAL_V1. The value for IoT SiteWise Monitor (AI-aware) is SITEWISE_PORTAL_V2.
    ///   - portalTypeConfiguration: The configuration entry associated with the specific portal type. The value for IoT SiteWise Monitor (Classic) is SITEWISE_PORTAL_V1. The value for IoT SiteWise Monitor (AI-aware) is SITEWISE_PORTAL_V2.
    ///   - roleArn: The ARN of a service role that allows the portal's users to access your IoT SiteWise resources on your behalf. For more information, see Using service roles for IoT SiteWise Monitor in the IoT SiteWise User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePortal(
        alarms: Alarms? = nil,
        clientToken: String? = UpdatePortalRequest.idempotencyToken(),
        notificationSenderEmail: String? = nil,
        portalContactEmail: String,
        portalDescription: String? = nil,
        portalId: String,
        portalLogoImage: Image? = nil,
        portalName: String,
        portalType: PortalType? = nil,
        portalTypeConfiguration: [String: PortalTypeEntry]? = nil,
        roleArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePortalResponse {
        let input = UpdatePortalRequest(
            alarms: alarms, 
            clientToken: clientToken, 
            notificationSenderEmail: notificationSenderEmail, 
            portalContactEmail: portalContactEmail, 
            portalDescription: portalDescription, 
            portalId: portalId, 
            portalLogoImage: portalLogoImage, 
            portalName: portalName, 
            portalType: portalType, 
            portalTypeConfiguration: portalTypeConfiguration, 
            roleArn: roleArn
        )
        return try await self.updatePortal(input, logger: logger)
    }

    /// Updates an IoT SiteWise Monitor project.
    @Sendable
    @inlinable
    public func updateProject(_ input: UpdateProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateProjectResponse {
        try await self.client.execute(
            operation: "UpdateProject", 
            path: "/projects/{projectId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            hostPrefix: "monitor.", 
            logger: logger
        )
    }
    /// Updates an IoT SiteWise Monitor project.
    ///
    /// Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - projectDescription: A new description for the project.
    ///   - projectId: The ID of the project to update.
    ///   - projectName: A new friendly name for the project.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateProject(
        clientToken: String? = UpdateProjectRequest.idempotencyToken(),
        projectDescription: String? = nil,
        projectId: String,
        projectName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateProjectResponse {
        let input = UpdateProjectRequest(
            clientToken: clientToken, 
            projectDescription: projectDescription, 
            projectId: projectId, 
            projectName: projectName
        )
        return try await self.updateProject(input, logger: logger)
    }
}

extension IoTSiteWise {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: IoTSiteWise, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension IoTSiteWise {
    /// Return PaginatorSequence for operation ``batchGetAssetPropertyAggregates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyAggregatesPaginator(
        _ input: BatchGetAssetPropertyAggregatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyAggregatesRequest, BatchGetAssetPropertyAggregatesResponse> {
        return .init(
            input: input,
            command: self.batchGetAssetPropertyAggregates,
            inputKey: \BatchGetAssetPropertyAggregatesRequest.nextToken,
            outputKey: \BatchGetAssetPropertyAggregatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``batchGetAssetPropertyAggregates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - entries: The list of asset property aggregate entries for the batch get request. You can specify up to 16 entries per request.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 1 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 4000.
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyAggregatesPaginator(
        entries: [BatchGetAssetPropertyAggregatesEntry],
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyAggregatesRequest, BatchGetAssetPropertyAggregatesResponse> {
        let input = BatchGetAssetPropertyAggregatesRequest(
            entries: entries, 
            maxResults: maxResults
        )
        return self.batchGetAssetPropertyAggregatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``batchGetAssetPropertyValue(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyValuePaginator(
        _ input: BatchGetAssetPropertyValueRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyValueRequest, BatchGetAssetPropertyValueResponse> {
        return .init(
            input: input,
            command: self.batchGetAssetPropertyValue,
            inputKey: \BatchGetAssetPropertyValueRequest.nextToken,
            outputKey: \BatchGetAssetPropertyValueResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``batchGetAssetPropertyValue(_:logger:)``.
    ///
    /// - Parameters:
    ///   - entries: The list of asset property value entries for the batch get request. You can specify up to 128 entries per request.
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyValuePaginator(
        entries: [BatchGetAssetPropertyValueEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyValueRequest, BatchGetAssetPropertyValueResponse> {
        let input = BatchGetAssetPropertyValueRequest(
            entries: entries
        )
        return self.batchGetAssetPropertyValuePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``batchGetAssetPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyValueHistoryPaginator(
        _ input: BatchGetAssetPropertyValueHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyValueHistoryRequest, BatchGetAssetPropertyValueHistoryResponse> {
        return .init(
            input: input,
            command: self.batchGetAssetPropertyValueHistory,
            inputKey: \BatchGetAssetPropertyValueHistoryRequest.nextToken,
            outputKey: \BatchGetAssetPropertyValueHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``batchGetAssetPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - entries: The list of asset property historical value entries for the batch get request. You can specify up to 16 entries per request.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 4 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 20000.
    ///   - logger: Logger used for logging
    @inlinable
    public func batchGetAssetPropertyValueHistoryPaginator(
        entries: [BatchGetAssetPropertyValueHistoryEntry],
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<BatchGetAssetPropertyValueHistoryRequest, BatchGetAssetPropertyValueHistoryResponse> {
        let input = BatchGetAssetPropertyValueHistoryRequest(
            entries: entries, 
            maxResults: maxResults
        )
        return self.batchGetAssetPropertyValueHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``executeQuery(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func executeQueryPaginator(
        _ input: ExecuteQueryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ExecuteQueryRequest, ExecuteQueryResponse> {
        return .init(
            input: input,
            command: self.executeQuery,
            inputKey: \ExecuteQueryRequest.nextToken,
            outputKey: \ExecuteQueryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``executeQuery(_:logger:)``.
    ///
    /// - Parameters:
    ///   - clientToken: A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.
    ///   - maxResults: The maximum number of results to return at one time.   Minimum is 1   Maximum is 20000   Default is 20000
    ///   - queryStatement: The IoT SiteWise query statement.
    ///   - logger: Logger used for logging
    @inlinable
    public func executeQueryPaginator(
        clientToken: String? = ExecuteQueryRequest.idempotencyToken(),
        maxResults: Int? = nil,
        queryStatement: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ExecuteQueryRequest, ExecuteQueryResponse> {
        let input = ExecuteQueryRequest(
            clientToken: clientToken, 
            maxResults: maxResults, 
            queryStatement: queryStatement
        )
        return self.executeQueryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getAssetPropertyAggregates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getAssetPropertyAggregatesPaginator(
        _ input: GetAssetPropertyAggregatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetAssetPropertyAggregatesRequest, GetAssetPropertyAggregatesResponse> {
        return .init(
            input: input,
            command: self.getAssetPropertyAggregates,
            inputKey: \GetAssetPropertyAggregatesRequest.nextToken,
            outputKey: \GetAssetPropertyAggregatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getAssetPropertyAggregates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aggregateTypes: The data aggregating function.
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endDate: The inclusive end of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 1 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 2500.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - qualities: The quality by which to filter asset data.
    ///   - resolution: The time interval over which to aggregate data.
    ///   - startDate: The exclusive start of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - timeOrdering: The chronological sorting order of the requested information. Default: ASCENDING
    ///   - logger: Logger used for logging
    @inlinable
    public func getAssetPropertyAggregatesPaginator(
        aggregateTypes: [AggregateType],
        assetId: String? = nil,
        endDate: Date,
        maxResults: Int? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        qualities: [Quality]? = nil,
        resolution: String,
        startDate: Date,
        timeOrdering: TimeOrdering? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetAssetPropertyAggregatesRequest, GetAssetPropertyAggregatesResponse> {
        let input = GetAssetPropertyAggregatesRequest(
            aggregateTypes: aggregateTypes, 
            assetId: assetId, 
            endDate: endDate, 
            maxResults: maxResults, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            qualities: qualities, 
            resolution: resolution, 
            startDate: startDate, 
            timeOrdering: timeOrdering
        )
        return self.getAssetPropertyAggregatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getAssetPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getAssetPropertyValueHistoryPaginator(
        _ input: GetAssetPropertyValueHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetAssetPropertyValueHistoryRequest, GetAssetPropertyValueHistoryResponse> {
        return .init(
            input: input,
            command: self.getAssetPropertyValueHistory,
            inputKey: \GetAssetPropertyValueHistoryRequest.nextToken,
            outputKey: \GetAssetPropertyValueHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getAssetPropertyValueHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endDate: The inclusive end of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - maxResults: The maximum number of results to return for each paginated request. A result set is returned in the two cases, whichever occurs first.   The size of the result set is equal to 4 MB.   The number of data points in the result set is equal to the value of maxResults. The maximum value of maxResults is 20000.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - qualities: The quality by which to filter asset data.
    ///   - startDate: The exclusive start of the range from which to query historical data, expressed in seconds in Unix epoch time.
    ///   - timeOrdering: The chronological sorting order of the requested information. Default: ASCENDING
    ///   - logger: Logger used for logging
    @inlinable
    public func getAssetPropertyValueHistoryPaginator(
        assetId: String? = nil,
        endDate: Date? = nil,
        maxResults: Int? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        qualities: [Quality]? = nil,
        startDate: Date? = nil,
        timeOrdering: TimeOrdering? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetAssetPropertyValueHistoryRequest, GetAssetPropertyValueHistoryResponse> {
        let input = GetAssetPropertyValueHistoryRequest(
            assetId: assetId, 
            endDate: endDate, 
            maxResults: maxResults, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            qualities: qualities, 
            startDate: startDate, 
            timeOrdering: timeOrdering
        )
        return self.getAssetPropertyValueHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getInterpolatedAssetPropertyValues(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getInterpolatedAssetPropertyValuesPaginator(
        _ input: GetInterpolatedAssetPropertyValuesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetInterpolatedAssetPropertyValuesRequest, GetInterpolatedAssetPropertyValuesResponse> {
        return .init(
            input: input,
            command: self.getInterpolatedAssetPropertyValues,
            inputKey: \GetInterpolatedAssetPropertyValuesRequest.nextToken,
            outputKey: \GetInterpolatedAssetPropertyValuesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getInterpolatedAssetPropertyValues(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset, in UUID format.
    ///   - endTimeInSeconds: The inclusive end of the range from which to interpolate data, expressed in seconds in Unix epoch time.
    ///   - endTimeOffsetInNanos: The nanosecond offset converted from endTimeInSeconds.
    ///   - intervalInSeconds: The time interval in seconds over which to interpolate data. Each interval starts when the previous one ends.
    ///   - intervalWindowInSeconds: The query interval for the window, in seconds. IoT SiteWise computes each interpolated value by using data points from the timestamp of each interval, minus the window to the timestamp of each interval plus the window. If not specified, the window ranges between the start time minus the interval and the end time plus the interval.    If you specify a value for the intervalWindowInSeconds parameter, the value for the type parameter must be LINEAR_INTERPOLATION.   If a data point isn't found during the specified query window, IoT SiteWise won't return an interpolated value for the interval. This indicates that there's a gap in the ingested data points.    For example, you can get the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. If the interpolation starts on July 1, 2021, at 9 AM with a window of 2 hours, IoT SiteWise uses the data points from 7 AM (9 AM minus 2 hours) to 11 AM (9 AM plus 2 hours) on July 2, 2021 to compute the first interpolated value. Next, IoT SiteWise uses the data points from 7 AM (9 AM minus 2 hours) to 11 AM (9 AM plus 2 hours) on July 3, 2021 to compute the second interpolated value, and so on.
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 10.
    ///   - propertyAlias: The alias that identifies the property, such as an OPC-UA server data stream path (for example, /company/windfarm/3/turbine/7/temperature). For more information, see Mapping industrial data streams to asset properties in the IoT SiteWise User Guide.
    ///   - propertyId: The ID of the asset property, in UUID format.
    ///   - quality: The quality of the asset property value. You can use this parameter as a filter to choose only the asset property values that have a specific quality.
    ///   - startTimeInSeconds: The exclusive start of the range from which to interpolate data, expressed in seconds in Unix epoch time.
    ///   - startTimeOffsetInNanos: The nanosecond offset converted from startTimeInSeconds.
    ///   - type: The interpolation type. Valid values: LINEAR_INTERPOLATION | LOCF_INTERPOLATION     LINEAR_INTERPOLATION – Estimates missing data using linear interpolation. For example, you can use this operation to return the interpolated temperature values for a wind turbine every 24 hours over a duration of 7 days. If the interpolation starts July 1, 2021, at 9 AM, IoT SiteWise returns the first interpolated value on July 2, 2021, at 9 AM, the second interpolated value on July 3, 2021, at 9 AM, and so on.    LOCF_INTERPOLATION – Estimates missing data using last observation carried forward interpolation If no data point is found for an interval, IoT SiteWise returns the last observed data point for the previous interval and carries forward this interpolated value until a new data point is found. For example, you can get the state of an on-off valve every 24 hours over a duration of 7 days. If the interpolation starts July 1, 2021, at 9 AM, IoT SiteWise returns the last observed data point between July 1, 2021, at 9 AM and July 2, 2021, at 9 AM as the first interpolated value. If a data point isn't found after 9 AM on July 2, 2021, IoT SiteWise uses the same interpolated value for the rest of the days.
    ///   - logger: Logger used for logging
    @inlinable
    public func getInterpolatedAssetPropertyValuesPaginator(
        assetId: String? = nil,
        endTimeInSeconds: Int64,
        endTimeOffsetInNanos: Int? = nil,
        intervalInSeconds: Int64,
        intervalWindowInSeconds: Int64? = nil,
        maxResults: Int? = nil,
        propertyAlias: String? = nil,
        propertyId: String? = nil,
        quality: Quality,
        startTimeInSeconds: Int64,
        startTimeOffsetInNanos: Int? = nil,
        type: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetInterpolatedAssetPropertyValuesRequest, GetInterpolatedAssetPropertyValuesResponse> {
        let input = GetInterpolatedAssetPropertyValuesRequest(
            assetId: assetId, 
            endTimeInSeconds: endTimeInSeconds, 
            endTimeOffsetInNanos: endTimeOffsetInNanos, 
            intervalInSeconds: intervalInSeconds, 
            intervalWindowInSeconds: intervalWindowInSeconds, 
            maxResults: maxResults, 
            propertyAlias: propertyAlias, 
            propertyId: propertyId, 
            quality: quality, 
            startTimeInSeconds: startTimeInSeconds, 
            startTimeOffsetInNanos: startTimeOffsetInNanos, 
            type: type
        )
        return self.getInterpolatedAssetPropertyValuesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAccessPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccessPoliciesPaginator(
        _ input: ListAccessPoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccessPoliciesRequest, ListAccessPoliciesResponse> {
        return .init(
            input: input,
            command: self.listAccessPolicies,
            inputKey: \ListAccessPoliciesRequest.nextToken,
            outputKey: \ListAccessPoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccessPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - iamArn: The ARN of the IAM user. For more information, see IAM ARNs in the IAM User Guide. This parameter is required if you specify IAM for identityType.
    ///   - identityId: The ID of the identity. This parameter is required if you specify USER or GROUP for identityType.
    ///   - identityType: The type of identity (IAM Identity Center user, IAM Identity Center group, or IAM user). This parameter is required if you specify identityId.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - resourceId: The ID of the resource. This parameter is required if you specify resourceType.
    ///   - resourceType: The type of resource (portal or project). This parameter is required if you specify resourceId.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccessPoliciesPaginator(
        iamArn: String? = nil,
        identityId: String? = nil,
        identityType: IdentityType? = nil,
        maxResults: Int? = nil,
        resourceId: String? = nil,
        resourceType: ResourceType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccessPoliciesRequest, ListAccessPoliciesResponse> {
        let input = ListAccessPoliciesRequest(
            iamArn: iamArn, 
            identityId: identityId, 
            identityType: identityType, 
            maxResults: maxResults, 
            resourceId: resourceId, 
            resourceType: resourceType
        )
        return self.listAccessPoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssetModelCompositeModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelCompositeModelsPaginator(
        _ input: ListAssetModelCompositeModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetModelCompositeModelsRequest, ListAssetModelCompositeModelsResponse> {
        return .init(
            input: input,
            command: self.listAssetModelCompositeModels,
            inputKey: \ListAssetModelCompositeModelsRequest.nextToken,
            outputKey: \ListAssetModelCompositeModelsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssetModelCompositeModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelCompositeModelsPaginator(
        assetModelId: String,
        assetModelVersion: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetModelCompositeModelsRequest, ListAssetModelCompositeModelsResponse> {
        let input = ListAssetModelCompositeModelsRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            maxResults: maxResults
        )
        return self.listAssetModelCompositeModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssetModelProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelPropertiesPaginator(
        _ input: ListAssetModelPropertiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetModelPropertiesRequest, ListAssetModelPropertiesResponse> {
        return .init(
            input: input,
            command: self.listAssetModelProperties,
            inputKey: \ListAssetModelPropertiesRequest.nextToken,
            outputKey: \ListAssetModelPropertiesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssetModelProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - filter:  Filters the requested list of asset model properties. You can choose one of the following options:    ALL – The list includes all asset model properties for a given asset model ID.     BASE – The list includes only base asset model properties for a given asset model ID.    Default: BASE
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelPropertiesPaginator(
        assetModelId: String,
        assetModelVersion: String? = nil,
        filter: ListAssetModelPropertiesFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetModelPropertiesRequest, ListAssetModelPropertiesResponse> {
        let input = ListAssetModelPropertiesRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssetModelPropertiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssetModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelsPaginator(
        _ input: ListAssetModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetModelsRequest, ListAssetModelsResponse> {
        return .init(
            input: input,
            command: self.listAssetModels,
            inputKey: \ListAssetModelsRequest.nextToken,
            outputKey: \ListAssetModelsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssetModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelTypes: The type of asset model. If you don't provide an assetModelTypes, all types of asset models are returned.    ASSET_MODEL – An asset model that you can use to create assets. Can't be included as a component in another asset model.    COMPONENT_MODEL – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model.     INTERFACE – An interface is a type of model that defines a standard structure that can be applied to different asset models.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetModelsPaginator(
        assetModelTypes: [AssetModelType]? = nil,
        assetModelVersion: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetModelsRequest, ListAssetModelsResponse> {
        let input = ListAssetModelsRequest(
            assetModelTypes: assetModelTypes, 
            assetModelVersion: assetModelVersion, 
            maxResults: maxResults
        )
        return self.listAssetModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssetProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetPropertiesPaginator(
        _ input: ListAssetPropertiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetPropertiesRequest, ListAssetPropertiesResponse> {
        return .init(
            input: input,
            command: self.listAssetProperties,
            inputKey: \ListAssetPropertiesRequest.nextToken,
            outputKey: \ListAssetPropertiesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssetProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - filter:  Filters the requested list of asset properties. You can choose one of the following options:    ALL – The list includes all asset properties for a given asset model ID.     BASE – The list includes only base asset properties for a given asset model ID.    Default: BASE
    ///   - maxResults: The maximum number of results to return for each paginated request. If not specified, the default value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetPropertiesPaginator(
        assetId: String,
        filter: ListAssetPropertiesFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetPropertiesRequest, ListAssetPropertiesResponse> {
        let input = ListAssetPropertiesRequest(
            assetId: assetId, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssetPropertiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssetRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetRelationshipsPaginator(
        _ input: ListAssetRelationshipsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetRelationshipsRequest, ListAssetRelationshipsResponse> {
        return .init(
            input: input,
            command: self.listAssetRelationships,
            inputKey: \ListAssetRelationshipsRequest.nextToken,
            outputKey: \ListAssetRelationshipsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssetRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - traversalType: The type of traversal to use to identify asset relationships. Choose the following option:    PATH_TO_ROOT – Identify the asset's parent assets up to the root asset. The asset that you specify in assetId is the first result in the list of assetRelationshipSummaries, and the root asset is the last result.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetRelationshipsPaginator(
        assetId: String,
        maxResults: Int? = nil,
        traversalType: TraversalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetRelationshipsRequest, ListAssetRelationshipsResponse> {
        let input = ListAssetRelationshipsRequest(
            assetId: assetId, 
            maxResults: maxResults, 
            traversalType: traversalType
        )
        return self.listAssetRelationshipsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetsPaginator(
        _ input: ListAssetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssetsRequest, ListAssetsResponse> {
        return .init(
            input: input,
            command: self.listAssets,
            inputKey: \ListAssetsRequest.nextToken,
            outputKey: \ListAssetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model by which to filter the list of assets. This parameter is required if you choose ALL for filter. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - filter: The filter for the requested list of assets. Choose one of the following options:    ALL – The list includes all assets for a given asset model ID. The assetModelId parameter is required if you filter by ALL.    TOP_LEVEL – The list includes only top-level assets in the asset hierarchy tree.   Default: ALL
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssetsPaginator(
        assetModelId: String? = nil,
        filter: ListAssetsFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssetsRequest, ListAssetsResponse> {
        let input = ListAssetsRequest(
            assetModelId: assetModelId, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssociatedAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociatedAssetsPaginator(
        _ input: ListAssociatedAssetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssociatedAssetsRequest, ListAssociatedAssetsResponse> {
        return .init(
            input: input,
            command: self.listAssociatedAssets,
            inputKey: \ListAssociatedAssetsRequest.nextToken,
            outputKey: \ListAssociatedAssetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssociatedAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset to query. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - hierarchyId: (Optional) If you don't provide a hierarchyId, all the immediate assets in the traversalDirection will be returned.  The ID of the hierarchy by which child assets are associated to the asset. (This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.) For more information, see Asset hierarchies in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - traversalDirection: The direction to list associated assets. Choose one of the following options:    CHILD – The list includes all child assets associated to the asset.    PARENT – The list includes the asset's parent asset.   Default: CHILD
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociatedAssetsPaginator(
        assetId: String,
        hierarchyId: String? = nil,
        maxResults: Int? = nil,
        traversalDirection: TraversalDirection? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssociatedAssetsRequest, ListAssociatedAssetsResponse> {
        let input = ListAssociatedAssetsRequest(
            assetId: assetId, 
            hierarchyId: hierarchyId, 
            maxResults: maxResults, 
            traversalDirection: traversalDirection
        )
        return self.listAssociatedAssetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBulkImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBulkImportJobsPaginator(
        _ input: ListBulkImportJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBulkImportJobsRequest, ListBulkImportJobsResponse> {
        return .init(
            input: input,
            command: self.listBulkImportJobs,
            inputKey: \ListBulkImportJobsRequest.nextToken,
            outputKey: \ListBulkImportJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBulkImportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: You can use a filter to select the bulk import jobs that you want to retrieve.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBulkImportJobsPaginator(
        filter: ListBulkImportJobsFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBulkImportJobsRequest, ListBulkImportJobsResponse> {
        let input = ListBulkImportJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listBulkImportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCompositionRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCompositionRelationshipsPaginator(
        _ input: ListCompositionRelationshipsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCompositionRelationshipsRequest, ListCompositionRelationshipsResponse> {
        return .init(
            input: input,
            command: self.listCompositionRelationships,
            inputKey: \ListCompositionRelationshipsRequest.nextToken,
            outputKey: \ListCompositionRelationshipsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCompositionRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listCompositionRelationshipsPaginator(
        assetModelId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCompositionRelationshipsRequest, ListCompositionRelationshipsResponse> {
        let input = ListCompositionRelationshipsRequest(
            assetModelId: assetModelId, 
            maxResults: maxResults
        )
        return self.listCompositionRelationshipsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComputationModelDataBindingUsages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelDataBindingUsagesPaginator(
        _ input: ListComputationModelDataBindingUsagesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComputationModelDataBindingUsagesRequest, ListComputationModelDataBindingUsagesResponse> {
        return .init(
            input: input,
            command: self.listComputationModelDataBindingUsages,
            inputKey: \ListComputationModelDataBindingUsagesRequest.nextToken,
            outputKey: \ListComputationModelDataBindingUsagesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComputationModelDataBindingUsages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - dataBindingValueFilter: A filter used to limit the returned data binding usages based on specific data binding values. You can filter by asset, asset model, asset property, or asset model property to find all computation models using these specific data sources.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelDataBindingUsagesPaginator(
        dataBindingValueFilter: DataBindingValueFilter,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComputationModelDataBindingUsagesRequest, ListComputationModelDataBindingUsagesResponse> {
        let input = ListComputationModelDataBindingUsagesRequest(
            dataBindingValueFilter: dataBindingValueFilter, 
            maxResults: maxResults
        )
        return self.listComputationModelDataBindingUsagesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComputationModelResolveToResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelResolveToResourcesPaginator(
        _ input: ListComputationModelResolveToResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComputationModelResolveToResourcesRequest, ListComputationModelResolveToResourcesResponse> {
        return .init(
            input: input,
            command: self.listComputationModelResolveToResources,
            inputKey: \ListComputationModelResolveToResourcesRequest.nextToken,
            outputKey: \ListComputationModelResolveToResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComputationModelResolveToResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - computationModelId: The ID of the computation model for which to list resolved resources.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelResolveToResourcesPaginator(
        computationModelId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComputationModelResolveToResourcesRequest, ListComputationModelResolveToResourcesResponse> {
        let input = ListComputationModelResolveToResourcesRequest(
            computationModelId: computationModelId, 
            maxResults: maxResults
        )
        return self.listComputationModelResolveToResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComputationModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelsPaginator(
        _ input: ListComputationModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComputationModelsRequest, ListComputationModelsResponse> {
        return .init(
            input: input,
            command: self.listComputationModels,
            inputKey: \ListComputationModelsRequest.nextToken,
            outputKey: \ListComputationModelsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComputationModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - computationModelType: The type of computation model. If a computationModelType is not provided, all types of computation models are returned.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComputationModelsPaginator(
        computationModelType: ComputationModelType? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComputationModelsRequest, ListComputationModelsResponse> {
        let input = ListComputationModelsRequest(
            computationModelType: computationModelType, 
            maxResults: maxResults
        )
        return self.listComputationModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDashboards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDashboardsPaginator(
        _ input: ListDashboardsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDashboardsRequest, ListDashboardsResponse> {
        return .init(
            input: input,
            command: self.listDashboards,
            inputKey: \ListDashboardsRequest.nextToken,
            outputKey: \ListDashboardsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDashboards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - projectId: The ID of the project.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDashboardsPaginator(
        maxResults: Int? = nil,
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDashboardsRequest, ListDashboardsResponse> {
        let input = ListDashboardsRequest(
            maxResults: maxResults, 
            projectId: projectId
        )
        return self.listDashboardsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        _ input: ListDatasetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        return .init(
            input: input,
            command: self.listDatasets,
            inputKey: \ListDatasetsRequest.nextToken,
            outputKey: \ListDatasetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - sourceType: The type of data source for the dataset.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        maxResults: Int? = nil,
        sourceType: DatasetSourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        let input = ListDatasetsRequest(
            maxResults: maxResults, 
            sourceType: sourceType
        )
        return self.listDatasetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listExecutionsPaginator(
        _ input: ListExecutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListExecutionsRequest, ListExecutionsResponse> {
        return .init(
            input: input,
            command: self.listExecutions,
            inputKey: \ListExecutionsRequest.nextToken,
            outputKey: \ListExecutionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - actionType: The type of action exectued.
    ///   - maxResults: The maximum number of results returned for each paginated request.
    ///   - resolveToResourceId: The ID of the resolved resource.
    ///   - resolveToResourceType: The type of the resolved resource.
    ///   - targetResourceId: The ID of the target resource.
    ///   - targetResourceType: The type of the target resource.
    ///   - logger: Logger used for logging
    @inlinable
    public func listExecutionsPaginator(
        actionType: String? = nil,
        maxResults: Int? = nil,
        resolveToResourceId: String? = nil,
        resolveToResourceType: ResolveToResourceType? = nil,
        targetResourceId: String,
        targetResourceType: TargetResourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListExecutionsRequest, ListExecutionsResponse> {
        let input = ListExecutionsRequest(
            actionType: actionType, 
            maxResults: maxResults, 
            resolveToResourceId: resolveToResourceId, 
            resolveToResourceType: resolveToResourceType, 
            targetResourceId: targetResourceId, 
            targetResourceType: targetResourceType
        )
        return self.listExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listGateways(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listGatewaysPaginator(
        _ input: ListGatewaysRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListGatewaysRequest, ListGatewaysResponse> {
        return .init(
            input: input,
            command: self.listGateways,
            inputKey: \ListGatewaysRequest.nextToken,
            outputKey: \ListGatewaysResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listGateways(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listGatewaysPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListGatewaysRequest, ListGatewaysResponse> {
        let input = ListGatewaysRequest(
            maxResults: maxResults
        )
        return self.listGatewaysPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInterfaceRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInterfaceRelationshipsPaginator(
        _ input: ListInterfaceRelationshipsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInterfaceRelationshipsRequest, ListInterfaceRelationshipsResponse> {
        return .init(
            input: input,
            command: self.listInterfaceRelationships,
            inputKey: \ListInterfaceRelationshipsRequest.nextToken,
            outputKey: \ListInterfaceRelationshipsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInterfaceRelationships(_:logger:)``.
    ///
    /// - Parameters:
    ///   - interfaceAssetModelId: The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listInterfaceRelationshipsPaginator(
        interfaceAssetModelId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInterfaceRelationshipsRequest, ListInterfaceRelationshipsResponse> {
        let input = ListInterfaceRelationshipsRequest(
            interfaceAssetModelId: interfaceAssetModelId, 
            maxResults: maxResults
        )
        return self.listInterfaceRelationshipsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPortals(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPortalsPaginator(
        _ input: ListPortalsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPortalsRequest, ListPortalsResponse> {
        return .init(
            input: input,
            command: self.listPortals,
            inputKey: \ListPortalsRequest.nextToken,
            outputKey: \ListPortalsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPortals(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - logger: Logger used for logging
    @inlinable
    public func listPortalsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPortalsRequest, ListPortalsResponse> {
        let input = ListPortalsRequest(
            maxResults: maxResults
        )
        return self.listPortalsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProjectAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectAssetsPaginator(
        _ input: ListProjectAssetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListProjectAssetsRequest, ListProjectAssetsResponse> {
        return .init(
            input: input,
            command: self.listProjectAssets,
            inputKey: \ListProjectAssetsRequest.nextToken,
            outputKey: \ListProjectAssetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProjectAssets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - projectId: The ID of the project.
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectAssetsPaginator(
        maxResults: Int? = nil,
        projectId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListProjectAssetsRequest, ListProjectAssetsResponse> {
        let input = ListProjectAssetsRequest(
            maxResults: maxResults, 
            projectId: projectId
        )
        return self.listProjectAssetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectsPaginator(
        _ input: ListProjectsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListProjectsRequest, ListProjectsResponse> {
        return .init(
            input: input,
            command: self.listProjects,
            inputKey: \ListProjectsRequest.nextToken,
            outputKey: \ListProjectsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return for each paginated request. Default: 50
    ///   - portalId: The ID of the portal.
    ///   - logger: Logger used for logging
    @inlinable
    public func listProjectsPaginator(
        maxResults: Int? = nil,
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListProjectsRequest, ListProjectsResponse> {
        let input = ListProjectsRequest(
            maxResults: maxResults, 
            portalId: portalId
        )
        return self.listProjectsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTimeSeries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTimeSeriesPaginator(
        _ input: ListTimeSeriesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTimeSeriesRequest, ListTimeSeriesResponse> {
        return .init(
            input: input,
            command: self.listTimeSeries,
            inputKey: \ListTimeSeriesRequest.nextToken,
            outputKey: \ListTimeSeriesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTimeSeries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aliasPrefix: The alias prefix of the time series.
    ///   - assetId: The ID of the asset in which the asset property was created. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - maxResults: The maximum number of results to return for each paginated request.
    ///   - timeSeriesType: The type of the time series. The time series type can be one of the following values:    ASSOCIATED – The time series is associated with an asset property.    DISASSOCIATED – The time series isn't associated with any asset property.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTimeSeriesPaginator(
        aliasPrefix: String? = nil,
        assetId: String? = nil,
        maxResults: Int? = nil,
        timeSeriesType: ListTimeSeriesType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTimeSeriesRequest, ListTimeSeriesResponse> {
        let input = ListTimeSeriesRequest(
            aliasPrefix: aliasPrefix, 
            assetId: assetId, 
            maxResults: maxResults, 
            timeSeriesType: timeSeriesType
        )
        return self.listTimeSeriesPaginator(input, logger: logger)
    }
}

extension IoTSiteWise.BatchGetAssetPropertyAggregatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.BatchGetAssetPropertyAggregatesRequest {
        return .init(
            entries: self.entries,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.BatchGetAssetPropertyValueHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.BatchGetAssetPropertyValueHistoryRequest {
        return .init(
            entries: self.entries,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.BatchGetAssetPropertyValueRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.BatchGetAssetPropertyValueRequest {
        return .init(
            entries: self.entries,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ExecuteQueryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ExecuteQueryRequest {
        return .init(
            clientToken: self.clientToken,
            maxResults: self.maxResults,
            nextToken: token,
            queryStatement: self.queryStatement
        )
    }
}

extension IoTSiteWise.GetAssetPropertyAggregatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.GetAssetPropertyAggregatesRequest {
        return .init(
            aggregateTypes: self.aggregateTypes,
            assetId: self.assetId,
            endDate: self.endDate,
            maxResults: self.maxResults,
            nextToken: token,
            propertyAlias: self.propertyAlias,
            propertyId: self.propertyId,
            qualities: self.qualities,
            resolution: self.resolution,
            startDate: self.startDate,
            timeOrdering: self.timeOrdering
        )
    }
}

extension IoTSiteWise.GetAssetPropertyValueHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.GetAssetPropertyValueHistoryRequest {
        return .init(
            assetId: self.assetId,
            endDate: self.endDate,
            maxResults: self.maxResults,
            nextToken: token,
            propertyAlias: self.propertyAlias,
            propertyId: self.propertyId,
            qualities: self.qualities,
            startDate: self.startDate,
            timeOrdering: self.timeOrdering
        )
    }
}

extension IoTSiteWise.GetInterpolatedAssetPropertyValuesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.GetInterpolatedAssetPropertyValuesRequest {
        return .init(
            assetId: self.assetId,
            endTimeInSeconds: self.endTimeInSeconds,
            endTimeOffsetInNanos: self.endTimeOffsetInNanos,
            intervalInSeconds: self.intervalInSeconds,
            intervalWindowInSeconds: self.intervalWindowInSeconds,
            maxResults: self.maxResults,
            nextToken: token,
            propertyAlias: self.propertyAlias,
            propertyId: self.propertyId,
            quality: self.quality,
            startTimeInSeconds: self.startTimeInSeconds,
            startTimeOffsetInNanos: self.startTimeOffsetInNanos,
            type: self.type
        )
    }
}

extension IoTSiteWise.ListAccessPoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAccessPoliciesRequest {
        return .init(
            iamArn: self.iamArn,
            identityId: self.identityId,
            identityType: self.identityType,
            maxResults: self.maxResults,
            nextToken: token,
            resourceId: self.resourceId,
            resourceType: self.resourceType
        )
    }
}

extension IoTSiteWise.ListAssetModelCompositeModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetModelCompositeModelsRequest {
        return .init(
            assetModelId: self.assetModelId,
            assetModelVersion: self.assetModelVersion,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListAssetModelPropertiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetModelPropertiesRequest {
        return .init(
            assetModelId: self.assetModelId,
            assetModelVersion: self.assetModelVersion,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListAssetModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetModelsRequest {
        return .init(
            assetModelTypes: self.assetModelTypes,
            assetModelVersion: self.assetModelVersion,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListAssetPropertiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetPropertiesRequest {
        return .init(
            assetId: self.assetId,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListAssetRelationshipsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetRelationshipsRequest {
        return .init(
            assetId: self.assetId,
            maxResults: self.maxResults,
            nextToken: token,
            traversalType: self.traversalType
        )
    }
}

extension IoTSiteWise.ListAssetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssetsRequest {
        return .init(
            assetModelId: self.assetModelId,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListAssociatedAssetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListAssociatedAssetsRequest {
        return .init(
            assetId: self.assetId,
            hierarchyId: self.hierarchyId,
            maxResults: self.maxResults,
            nextToken: token,
            traversalDirection: self.traversalDirection
        )
    }
}

extension IoTSiteWise.ListBulkImportJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListBulkImportJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListCompositionRelationshipsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListCompositionRelationshipsRequest {
        return .init(
            assetModelId: self.assetModelId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListComputationModelDataBindingUsagesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListComputationModelDataBindingUsagesRequest {
        return .init(
            dataBindingValueFilter: self.dataBindingValueFilter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListComputationModelResolveToResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListComputationModelResolveToResourcesRequest {
        return .init(
            computationModelId: self.computationModelId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListComputationModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListComputationModelsRequest {
        return .init(
            computationModelType: self.computationModelType,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListDashboardsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListDashboardsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectId: self.projectId
        )
    }
}

extension IoTSiteWise.ListDatasetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListDatasetsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            sourceType: self.sourceType
        )
    }
}

extension IoTSiteWise.ListExecutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListExecutionsRequest {
        return .init(
            actionType: self.actionType,
            maxResults: self.maxResults,
            nextToken: token,
            resolveToResourceId: self.resolveToResourceId,
            resolveToResourceType: self.resolveToResourceType,
            targetResourceId: self.targetResourceId,
            targetResourceType: self.targetResourceType
        )
    }
}

extension IoTSiteWise.ListGatewaysRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListGatewaysRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListInterfaceRelationshipsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListInterfaceRelationshipsRequest {
        return .init(
            interfaceAssetModelId: self.interfaceAssetModelId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListPortalsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListPortalsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension IoTSiteWise.ListProjectAssetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListProjectAssetsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            projectId: self.projectId
        )
    }
}

extension IoTSiteWise.ListProjectsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListProjectsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            portalId: self.portalId
        )
    }
}

extension IoTSiteWise.ListTimeSeriesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> IoTSiteWise.ListTimeSeriesRequest {
        return .init(
            aliasPrefix: self.aliasPrefix,
            assetId: self.assetId,
            maxResults: self.maxResults,
            nextToken: token,
            timeSeriesType: self.timeSeriesType
        )
    }
}

// MARK: Waiters

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension IoTSiteWise {
    /// Waiter for operation ``describeAsset(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetActive(
        _ input: DescribeAssetRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribeAssetRequest, _>(
            acceptors: [
                .init(state: .success, matcher: try! JMESPathMatcher("assetStatus.state", expected: "ACTIVE")),
                .init(state: .failure, matcher: try! JMESPathMatcher("assetStatus.state", expected: "FAILED")),
            ],
            minDelayTime: .seconds(3),
            command: self.describeAsset
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describeAsset(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset properties from the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetActive(
        assetId: String,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribeAssetRequest(
            assetId: assetId, 
            excludeProperties: excludeProperties
        )
        try await self.waitUntilAssetActive(input, logger: logger)
    }

    /// Waiter for operation ``describeAssetModel(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetModelActive(
        _ input: DescribeAssetModelRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribeAssetModelRequest, _>(
            acceptors: [
                .init(state: .success, matcher: try! JMESPathMatcher("assetModelStatus.state", expected: "ACTIVE")),
                .init(state: .failure, matcher: try! JMESPathMatcher("assetModelStatus.state", expected: "FAILED")),
            ],
            minDelayTime: .seconds(3),
            command: self.describeAssetModel
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describeAssetModel(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset model properties from the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetModelActive(
        assetModelId: String,
        assetModelVersion: String? = nil,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribeAssetModelRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            excludeProperties: excludeProperties
        )
        try await self.waitUntilAssetModelActive(input, logger: logger)
    }

    /// Waiter for operation ``describeAssetModel(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetModelNotExists(
        _ input: DescribeAssetModelRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribeAssetModelRequest, _>(
            acceptors: [
                .init(state: .success, matcher: AWSErrorCodeMatcher("ResourceNotFoundException")),
            ],
            minDelayTime: .seconds(3),
            command: self.describeAssetModel
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describeAssetModel(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetModelId: The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - assetModelVersion: The version alias that specifies the latest or active version of the asset model.  The details are returned in the response. The default value is LATEST. See  Asset model versions in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset model properties from the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetModelNotExists(
        assetModelId: String,
        assetModelVersion: String? = nil,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribeAssetModelRequest(
            assetModelId: assetModelId, 
            assetModelVersion: assetModelVersion, 
            excludeProperties: excludeProperties
        )
        try await self.waitUntilAssetModelNotExists(input, logger: logger)
    }

    /// Waiter for operation ``describeAsset(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetNotExists(
        _ input: DescribeAssetRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribeAssetRequest, _>(
            acceptors: [
                .init(state: .success, matcher: AWSErrorCodeMatcher("ResourceNotFoundException")),
            ],
            minDelayTime: .seconds(3),
            command: self.describeAsset
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describeAsset(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assetId: The ID of the asset. This can be either the actual ID in UUID format, or else externalId: followed by the external ID, if it has one. For more information, see Referencing objects with external IDs in the IoT SiteWise User Guide.
    ///   - excludeProperties:  Whether or not to exclude asset properties from the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilAssetNotExists(
        assetId: String,
        excludeProperties: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribeAssetRequest(
            assetId: assetId, 
            excludeProperties: excludeProperties
        )
        try await self.waitUntilAssetNotExists(input, logger: logger)
    }

    /// Waiter for operation ``describePortal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilPortalActive(
        _ input: DescribePortalRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribePortalRequest, _>(
            acceptors: [
                .init(state: .success, matcher: try! JMESPathMatcher("portalStatus.state", expected: "ACTIVE")),
            ],
            minDelayTime: .seconds(3),
            command: self.describePortal
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describePortal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - portalId: The ID of the portal.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilPortalActive(
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribePortalRequest(
            portalId: portalId
        )
        try await self.waitUntilPortalActive(input, logger: logger)
    }

    /// Waiter for operation ``describePortal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilPortalNotExists(
        _ input: DescribePortalRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<DescribePortalRequest, _>(
            acceptors: [
                .init(state: .success, matcher: AWSErrorCodeMatcher("ResourceNotFoundException")),
            ],
            minDelayTime: .seconds(3),
            command: self.describePortal
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``describePortal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - portalId: The ID of the portal.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilPortalNotExists(
        portalId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DescribePortalRequest(
            portalId: portalId
        )
        try await self.waitUntilPortalNotExists(input, logger: logger)
    }
}
